Overview
Controller class is used to control the report execution as well as preprocessing of the report data. The SSRS reporting framework uses this class to modify the report dialogs, calling the SQL Server reporting services, as well preprocessing parameters for the report.
Following are the scenarios where Controller class can be used:
- Modifying a report query based on the input data
- Modifying report contract data based on the input data
- Control a report parameters dialog
- Open different reports/designs from the same menu item based on the input data
- Reports that are opened from a form
To create a controller class, extend it with SrsReportRunController.
Prerequisites
- Microsoft Dynamics AX 2012
- Reporting services extensions must be installed in Dynamics AX
Sample Controller Class
- Create a new class. Open AOT → Classes
- Right Click on Classes and select New Class. Name it as SSRSDemoController.
- Open the Class declaration by right clicking on it and selecting View code.
- Now write the following code:
- Create a new method and write the following code:
Modifying report query based on the input data
- Used in those scenarios where a report query needs to be modified based on the caller args parameters or recorded before the report parameter dialog is rendered.
- Override prePromptModifyContract method to modify the report query as shown below:
Modifying report contract data based on the input data
- Used in those scenarios where report contract parameters need to be modified based on the caller args prior to the execution of the report.
- Override preRunModifyContract method to modify the report contract as shown below:
- Thanks, Hope it help you guys.


class SSRSDemoController extends SrsReportRunController
{
}
public static client void main(Args args)
{
//define the new object for controller class
SSRSDemoController ssrsDemoController;
ssrsDemoController = new SSRSDemoController();
//pass the caller args to the controller
ssrsDemoController.parmArgs(args);
//set the report name and report design to run
ssrsDemoController.parmReportName(ssrsReportStr(SSRSSessionQuery,Design));
//execute the report
ssrsDemoController.startOperation();
}
Examples of Controller Class Usage
Based on different scenarios, different methods are overridden as shown in the following examples:
public void prePromptModifyContract()
{
//add a range in the report query
SrsReportHelper::addParameterValueRangeToQuery(this.getFirstQuery(),tableNum(SSRSReportDemo),fieldNum(SSRSReportDemo, RecId),SysQuery::value(this.parmArgs().record().RecId));
}
Note: prePromptModifyContract is called by report controller before the parameter dialog is shown to the User.
protected void preRunModifyContract()
{
//define object for report contract
SSRSDemoContract contract;
//get the reference of the current contract object
contract = this.parmReportContract().parmRdpContract() as SSRSDemoContract;
//modify the parameter value of the contract
contract.parmType(this.parmArgs().parm());
}
Note: preRunModifyContract is called by report controller before the report is run.
If you don't need the dialog form or don't want to show the dialog form to end user then implement below before startOperation() method.
ssrsDemoController.parmShowDialog(false);
and delete the preRunModifyContact method and add the contract parameters in main() method like;
//get the reference of the current contract objectcontract = ssrsDemoController.parmReportContract().parmRdpContract() as SSRSDemoContract;
//modify the parameter value of the contractcontract.parmItemId(_itemid);
Comments
Post a Comment