Skip to main content

Changing design at runtime for the ssrs reports.

Changing design at runtime for the ssrs reports.

For print management reports.


There are reports which are handled by print management while printing.
Even if you create a new design and set it up by modifying "main()" method in controller class it will not reflect.

For this scenario i am taking example of "PurchPurchaseOrder" report which is printed while confirming the PO.
The scenario targets to achieve a functionality where we can call same report, different design called by different menu items.
Here there are two designs one is "kiGalvanizeReport" and other is "kiReport".
To achieve this we need to modify "output()" method of controller class.
Its better to write a new method with parameters and then call the method in the "output()" method.

Below is the code for new method.


private void kiPrintJobSettings(FormLetterReport  _formLetterReport,args _args)
{
    PrintMgmtPrintSettingDetail printSettingDetail = new PrintMgmtPrintSettingDetail();

    if(_args.menuItemName() == menuitemOutputStr(kiPurchPurchaseOrderGalvanize))
    {
        printSettingDetail.parmReportFormatName(ssrsReportStr(PurchPurchaseOrder, kiGalvanizeReport)); //This is the important line
    }
    else if (_args.menuItemName() == menuitemOutputStr(DTC_PurchPurchaseOrderOriginal))
    {
        printSettingDetail.parmReportFormatName(ssrsReportStr(PurchPurchaseOrder, kiReport)); //This is the important line
    }
    printSettingDetail.parmType(PrintMgmtDocInstanceType::Original);
    printSettingDetail.parmInstanceName(enum2str(PrintMgmtDocInstanceType::Original));
    printSettingDetail.parmNumberOfCopies(1);
    printSettingDetail.parmPrintJobSettings(_formLetterReport.parmReportRun().parmDefaultOriginalPrintJobSettings());
    if (!_formLetterReport.parmUseUserDefinedDestinations())
    {
        printSettingDetail.parmPrintJobSettings().printMediumType(SRSPrintMediumType::Screen);
    }
    _formLetterReport.parmReportRun().loadSettingDetail(printSettingDetail,"");
}

After this we need to call this method in "output()" method.


protected void output()
{
    PurchTable purchTable = PurchTable::find(vendPurchOrderJour.PurchId);

    formLetterReport.loadPrintSettings(vendPurchOrderJour, purchTable, purchTable.LanguageId);

    //Added on date 27/08/2015 by Kirtan,DTC_PurchPurachseOrder - Start
    this.dtcPrintJobSettings(formLetterReport,this.parmArgs());
    //Added on date 27/08/2015 by Kirtan,DTC_PurchPurachseOrder - End

    this.parmReportContract().parmRdlContract().parmLanguageId(purchTable.LanguageId);

    super();
}

After this call the report from respective menu items and it will show the desired the report design.
No need to setup print management parameters for documents.

Happy daxing!!!

Comments

Popular posts from this blog

Error 500 on the server for D365 finance and operations

While working on D365 finance and operations one fine day i came across the error 500. There are many reasons for this server. Below link can help you if encounter the same issue. https://community.dynamics.com/ax/f/33/t/195422 If any of solutions does not work for you then you might need to check if there are any newly added objects through code and they might be causing the issue. Try to remove them build and synchronize them with the database. https://community.dynamics.com/ax/b/axdilip/archive/2017/01/05/dynamics-365-for-operations-troubleshooting-http-500-httpcompileexception-error To debug more you can use solution provided in below link. https://www.linkedin.com/pulse/ax7-500-error-shashi-kant-yadav In my case the issue was related to the certificate expiration. To check the expired certificate on the server we can go to "Certificate Management Console" and see the certificates expiration date. To check this is power shell open "Windows PowerS

A reference to 'Dynamics.AX.XXXXX, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is required to compile this module.

The error "A reference to 'Dynamics.AX.Directory, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is required to compile this module." came on when i was building the project in visual studio. This error is thrown when the model is missing any reference which are needed to build the project. To update rectify this error we need to update the model. To do that go to "Dynamics 365 > Model Management > Update model parameter" A new window will open the model you want to update. Here i am selecting "Development" which i have created. Then click on next. On "Select referenced packages" select the missing packages which ones is throwing error. Here i have selected the "Directory" packages as they are the once throwing error. Select the packages. After selecting the packages click on "Next". And Click on "Finish". Rebuild the project and you are good to go.

D365 Month end and year end process

Period Closing Accounts Payable a.          Post invoices for all open/received purchase orders. b.          Post all pending invoices if received from Vendor. c.          Post and settle all payments. d.          Run Currency revaluation e.          Reconcile Vendor balance and trial balance for control accounts. f.           Set fiscal period on-hold for Vendor. Accounts Receivable a.          Post invoices for all open/delivered sales orders. b.          Post all pending free text invoices. c.          Post and settle all received payments. d.          Run Currency revaluation e.          Reconcile Vendor balance and trial balance for control accounts. f.           Set fiscal period on-hold for Customer. Cash and Bank a.          Perform Bank reconciliation b.          Set fiscal period on-hold for Bank. Procurement / Sales a.          Review and Close all open purchase/sales orders/Requisition if require. b.          Perform sort cl