How to Open multiple instances of Report at the same time using X++ code in D365 Fo
1.) Declare contract Class 2 variales
List customerList;
str customer;
[DataMemberAttribute('customer'), SysOperationLabelAttribute("customer Account")]
public str ParmCustomer(str _customer = customer)
{
customer = _customer;
return customer;
}
[DataMemberAttribute('customerList'),SysOperationLabelAttribute("customer"),AifCollectionTypeAttribute("customerList", Types::String)]
public List ParmcustomerList(List _customerList = customerList)
{
customerList = _customerList;
return customerList;
}
2). controller class
Decalre on controller class
using System.IO.Compression;
public static void main(Args _args)
{
DSAQMCustAccountStatementV2Controller mainController = new DSAQMCustAccountStatementV2Controller();
mainController.parmArgs(_args);
mainController.parmShowDialog(true);
mainController.parmReportName(ssrsReportStr(DSAQMCustAccountStatementV2, Report));
mainController.parmLoadFromSysLastValue(false);
if(mainController.prompt())
{
mainController.parmReportContract();
mainController.prePromptModifyContract();
// for Saleman
DSAQMCustAccountStatementV2Contract inputContract = mainController.parmReportContract().parmRdpContract() as DSAQMCustAccountStatementV2Contract;
List salesman = inputContract.ParmSalesman();
if(salesman.elements())
{
List salesmanCustomer = DSAQMCustAccountStatementV2Controller::getsalesman(salesman);
inputContract.ParmcustomerList(salesmanCustomer);
}
//Form Customer
Map map = new Map(Types::String, Types::Class);
SRSPrintDestinationSettings settings = mainController.parmReportContract().parmPrintSettings();
List customerList = inputContract.ParmcustomerList();
ListEnumerator listEnumerator = customerList.getEnumerator();
if(customerList.elements())
{
while (listEnumerator.moveNext())
{
DSAQMCustAccountStatementV2Controller controller = mainController;
controller.parmShowDialog(false);
DSAQMCustAccountStatementV2Contract custContract = inputContract;
custContract.parmCustomer(listEnumerator.current());
controller.parmReportContract().parmRdpContract(custContract);
if(settings.printMediumType() == SRSPrintMediumType::File)
{
CustTable CustTable = CustTable::find(custContract.parmCustomer());
System.IO.MemoryStream mstream = DSAQMCustAccountStatementV2Controller::getFileStreams(controller, strFmt("%1-%2.pdf", CustTable.AccountNum, CustTable.name()));
map.insert(strFmt("%1-%2.pdf", CustTable.AccountNum, CustTable.name()), mstream);
}
else
{
controller.startOperation();
}
}
if(map.elements())
{DSAQMCustAccountStatementV2Controller::createZipFile(map);}
}
else
{
throw error(strFmt("No customer found!"));
}
}
}
3). Use string variable in Dp class to pprint the report
Comments
Post a Comment