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

Popular posts from this blog

Get Current Worker data in d365 fo x++

Table Level Event Handler in d365 fo x++