Developing SSRS Reports forDynamics AXSyed Baber12/14/2010
1.      SSRS Installation and Configuration: ................................................................................
1. SSRS Installation and Configuration:Before start developing SSRS report for MS Dynamics AX, you need to install BI comp...
Verify that the values are filled in and server name is the name of your machine.    2. Editing existing SSRS Reports:To e...
3. Developing a new SSRS report:Before start developing SSRS reports for Dynamics AX, you must have installed BI Component...
From the above dialog select Microsoft Dynamics AX in Project types and select Report Modelundertemplates section.The SSRS...
Select Microsoft Dynamics AX under Project types and Report Model under Templates section. Specifythe name of the report a...
Double click on the newly created report. You will see report items on the left side in VisualStudio as shown in the below...
Select All Fields from the right column to show all fields on the report dataset and then click‘OK’ button. All the fields...
Now we execute the report to see the output. The records will be fetched from Customer tableso make sure that the CustTabl...
blank output will be shown. There are three ways of opening an SSRS report which are asfollows:   1) From Visual Studio wh...
Now right click the report solution in VS and select deploy solution as shown below:To view SSRS report from browser,go to...
Opening SSRS report from AXTo open SSRS report from AX, you first need to create an output menu item which refers to theSS...
4.3.    Filtering a report with an specific parameterSuppose you want to filter the report we have developed earlier by cu...
You can see the customer group parameter in the above dialog which we have added through reportquery.Another parameter cus...
Again click the OK button on the report dialog to open the report filtered by customer group 30.Following output will be s...
5. Developing RDP based SSRS reportsRDP (Report data provider) based reports are developed, when reports has a complex log...
This attribute specifies the AOT query which is used by this SSRS report. Also declare some classvariables which are neede...
publicvoidprocessReport(){QueryRunqueryRun;queryRun = newQueryRun(this.parmQuery());while (queryRun.next())    {custTable ...
Notice the query mentioned in the Query property of dataset. It is the syntax for mentioning RDP classand temp table in th...
6. Using Controller ClassFollowing table describes the scenarios and suggests the proper way of using controller class in ...
6.1.2. BankDepositSlipControllerThis class uses theprePromptModifyContract method to modify the report query before the re...
7.1.    Defining label and help text for parametersLabel and help text for report parameters can be defined through attrib...
Upcoming SlideShare
Loading in...5
×

Developing ssrs-reports-for-dynamics-ax-120402001948-phpapp01

3,803

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,803
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
270
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Developing ssrs-reports-for-dynamics-ax-120402001948-phpapp01"

  1. 1. Developing SSRS Reports forDynamics AXSyed Baber12/14/2010
  2. 2. 1. SSRS Installation and Configuration: ..................................................................................................... 32. Editing existing SSRS Reports: ............................................................................................................... 43. Developing a new SSRS report: ............................................................................................................. 54. Developing Query Based SSRS reports using VS ................................................................................... 6 4.1. Previewing SSRS reports from Visual Studio ............................................................................... 11 4.2. Viewing SSRS report on browser ................................................................................................ 11 Opening SSRS report from AX ................................................................................................................. 13 4.3. Filtering a report with an specific parameter ............................................................................. 145. Developing RDP based SSRS reports ................................................................................................... 176. Using Controller Class ......................................................................................................................... 21 6.1. Examples of controller class usage ............................................................................................. 21 6.1.1. HcmEmployeeLeaveController ........................................................................................... 21 6.1.2. BankDepositSlipController .................................................................................................. 227. Data Contract class for SSRS Reports .................................................................................................. 22 7.1. Defining label and help text for parameters ........................................................................... 23
  3. 3. 1. SSRS Installation and Configuration:Before start developing SSRS report for MS Dynamics AX, you need to install BI components andVisual Studio tools from MS Dynamics AX setup. The setup form is shown below with BIComponents and Visual Studio tools options checked:After installing BI Components and Visual Studio tools, you are ready to start working on SSRSreports for MS Dynamics AX. To verify that the BI Components installed successfully and reportservers are correctly configured in MS Dynamics AX, Go to Tools -> BI tools -> BI reports servers.Configuration form is shown below:
  4. 4. Verify that the values are filled in and server name is the name of your machine. 2. Editing existing SSRS Reports:To edit any existing SSRS Report, go to AOTVisual Studio ProjectsDynamics AX Model Projects. Underthis node you will find Visual Studio solutions and Projects that has been developed using Visual Studio.To edit any solution, right click on it and select ‘Edit’. The selected solution opens in Visual Studio. Aftermaking the desired changes in the project, just select the project in solution explorer, use File -> Add‘Project’ toAOT option to add the changes in Dynamics AX. Screen shot shown below:
  5. 5. 3. Developing a new SSRS report:Before start developing SSRS reports for Dynamics AX, you must have installed BI Components andVisual Studio tools from AX setup. After installation of both these additional components, open VisualStudio, click on File -> New Project. New Project dialog is open as shown below:
  6. 6. From the above dialog select Microsoft Dynamics AX in Project types and select Report Modelundertemplates section.The SSRS reports needs a data source from where the report can grab the data anddisplayed it on the report. There are three types of data source available to be used in SSRS report whichis as follows:  Query  RDP (Report data provider).  Business Logic.When you use query as a data source type for SSRS report then the report is called Query based report.Now, I am going to explain you that how we develop SSRS reports based on Query. 4. Developing Query Based SSRS reports using VSBefore you can start developing query based reports in VS, you need an AOT query to be created inDynamics AX. Suppose you want to show all the records form CustTable table in an SSRS report. This canbe achieved through query based report. Create an AOT query in Dynamics AX as shown below:The Query name is SampleQuery. Add CustTable under the data sources node of the query. All the fieldsof the CustTable are included in the AOT query. Now you need to create an SSRS report which used thisquery as a data source and display all the fields of CustTable on SSRS report. Open Visual Studio andgoto File -> New Project. New Project dialog form will be opened as shown below:
  7. 7. Select Microsoft Dynamics AX under Project types and Report Model under Templates section. Specifythe name of the report as ‘QueryBasedReporrt’and press OK button. A new SSRS project will be createdas shown below:Now you need to add a report under the above project. Right click on the project, select Add and thenselect Report. A report will be added to the project with the name Report1. Change the report name toQueryBasedReport. Now the solution explorer should look like as shown below:
  8. 8. Double click on the newly created report. You will see report items on the left side in VisualStudio as shown in the below screen shot:The purpose of each report items is described below:  Datasets: The report dataset retrieves data from the AOT query. All fields which are available in AOT query are shown in the report dataset which can be referred in the report design later on.  Designs: The design or layout of the report on which the data would be displayed after retrieving from AX.  Images: Any embedded images that you want to display on SSRS report.  Data Methods: Business logic written in C#. Data methods are no more recommended.  Parameters: Report parameters which are to be displayed on SSRS report and user can filter the report based on those parameters.You first need to create a dataset that will refer to an AOT query created earlier. Right click onDatasets node and click ‘Add Dataset’. A dataset will be created with name ‘DataSet1’. Renameit to ‘QueryBasedReportDS’. The newly created dataset should refer to the AOT query fromwhere the data can be picked. Right click on the newly created dataset and select ‘Properties’.Set the data source type to ‘Query’ and click on the ‘Query’ property. An ellipses buttonappears, click on it. A new window will open which shows the entire AOT queries present inDynamics AX. Select the query ‘SampleQuery’ which you have created earlier as shown below:
  9. 9. Select All Fields from the right column to show all fields on the report dataset and then click‘OK’ button. All the fields which are added on AOT query are now showing on the reportdataset. You can see all the fields by expanding the Fields node under the dataset. You can referto any of these fields on the report design. Now we have created a dataset which provides thedata to the report, the next step is to create a report design.There are two types of report designs available in SSRS report i.e. AutoDesign andPrecisionDesign. First preference when developing reports is to use AutoDesign unless youneed a custom placement of fields in a report and in that case you have to usePrecisionDesign.Generally for complex report designs, we use PrecisionDesign. For the sake ofsimplicity, we will use AutoDesign here for our first SSRS report.Right click on the Designs node, click on Add->AutoDesign. An auto design is created with thename AutoDesign1. Change its name to ‘Report’ by right clicking on the AutoDesign1 and clickRename. It is recommended that you set the name of the Design to either ‘Design’ or ‘Report’.Now drag the data set of the report ‘QueryBasedReportDS’ on Report Design named ‘Report’. Atable will be created which contains all the fields that are shown in the report dataset. Thevalue of these fields will be shown on the report output in the same order as it is showing in thedata table. The final report design should look like as shown below:
  10. 10. Now we execute the report to see the output. The records will be fetched from Customer tableso make sure that the CustTable has some records in it before opening the report otherwise a
  11. 11. blank output will be shown. There are three ways of opening an SSRS report which are asfollows: 1) From Visual Studio which is actually the preview of the report. 2) From Browser by opening the URL http://localhost/reports. 3) From Dynamics AX through output menu item. 4.1. Previewing SSRS reports from Visual StudioYou can easily preview SSRS reports by right clicking on the design and select Preview option.For our example right click on the Design ‘Report’ and select Preview as shown in the belowscreen shot:A separate preview page is open which will show the report output. If your report has someparameters then the parameters will be shown first and then the output will be shown basedon the values of the parameters.Following report output will be shown when you preview thereport from VS: 4.2. Viewing SSRS report on browserBefore viewing report on browser you need to deploy report on the report server. You candeploy SSRS reports in two ways, first way is to right click the solution in Visual Studio andselect deploy solution option and the second way is to go to SSRS Reports/Reports node underAOT, right click on the report you want to deploy and then select Deploy. To deploy SSRS reportfrom AX, you need to first add the report project to AOT. Following screen shot shows how todo this:
  12. 12. Now right click the report solution in VS and select deploy solution as shown below:To view SSRS report from browser,go to URL http://localhost/reports. When the page is openyou will see the Dynamics folder link shown on the page. By clicking on the Dynamics folder youcan see the list of all SSRS reports deployed on the report server as shown below:Click on the report which you want to preview on browser. In our case, click on the SSRS reportQueryBasedReport.Report to view it on browser.Following output will be shown when youview the report from browser:
  13. 13. Opening SSRS report from AXTo open SSRS report from AX, you first need to create an output menu item which refers to theSSRS report you have created earlier. Below screen shot shows how to do this:Step 1: Create an output menu item Step 2: Set the object type and object properties as shown in the above screen shot.Now right click on the output menu item QueryBasedReport and select Open to launch thereport. Following output will be shown when you run the report from AX:
  14. 14. 4.3. Filtering a report with an specific parameterSuppose you want to filter the report we have developed earlier by customer group. In that case youneed to show the parameter customer group on the report dialog so that user can run the report for aspecific customer group. Steps are shown below:Step 1: Adding range in a report query. Step 2: Add CustGroup field under the Ranges node.Now compile the query ‘SampleQuery’ to save the changes. Run the report by right clicking the outputmenu item and select Open. Following report dialog will be shown:
  15. 15. You can see the customer group parameter in the above dialog which we have added through reportquery.Another parameter customer account is shown on the above dialog. Just ignore this parameter, itis showing here because this field is the part of unique index on CustTable. Now click on the selectbutton to specify a value for customer group parameter shown above. Following screen shot will beshown:Select the customer group 30 and click OK button. Customer group 30 will be shown selected on thereport dialog as shown below:
  16. 16. Again click the OK button on the report dialog to open the report filtered by customer group 30.Following output will be shown:As you can see that, only those records are shown, which have customer group 30. In the same way youcan apply as many filters as you want on the report AOT query to filter the report based on that field’svalue.
  17. 17. 5. Developing RDP based SSRS reportsRDP (Report data provider) based reports are developed, when reports has a complex logic that cannotbe achieved by just using an AOT query. In RDP based reports, in addition to an AOT query, an RDP classis developed which contains the report logic. After processing all the report logic, the data is filled intothe temporary table which is used as a data source for SSRS report. Now, I am going to describe abouthow to build an RDP based report. We will modify the previous AOT query for this example to add theCustTrans data source. The query will now look like as shown below:Now create a new RDP class and name it SampleReportDP.To create RDP based report, following objectsneeds to be created:  An RDP class.  An AOT query.  A temp table.The query has been modified for this example and now RDP class and temp table needs to becreated.Just for a demo purpose, I have thought of a requirement where we need to display thetransaction amount based on the customer group. The logic is as follows: If (customer group is 20) then multiply the transaction amount by 20 If (customer group is 40) then multiply the transaction amount by 40 If (customer group is 60) then multiply the transaction amount by 60Create a new class and name it SampleReportDP. In class declaration extend the class fromSRSReportDataProviderBaseclass. Add the following line before class declaration:[SRSReportQueryAttribute(querystr(SampleQuery))]
  18. 18. This attribute specifies the AOT query which is used by this SSRS report. Also declare some classvariables which are needed to store the values, retrieved after running the report query. The classdeclaration should look like as shown below:The second step is to create a temp table which is used to store the report data. Create a new table andname it SampleReportTmp. Set the TableType property of the new table to InMemory. Create fourfields in the temp table as shown below:Create a new method in RDP class which will select the temp table records and return it afterwards tobe used by the SSRS report. The new method should look like as shown below:Now we are going to implement the logic discussed above in RDP class processReport method. TheprocessReport method in RDP class is the point where the report processing begins. This method iscalled by the reporting framework. Actual report logic needs to be written in this method. In our case,the code for processReport method is as follows:
  19. 19. publicvoidprocessReport(){QueryRunqueryRun;queryRun = newQueryRun(this.parmQuery());while (queryRun.next()) {custTable = queryRun.get(tablenum(CustTable));custTrans = queryRun.get(tablenum(CustTrans));amountCur = custTrans.AmountCur;voucher = custTrans.Voucher;custGroup = custTable.CustGroup;transDate = custTrans.TransDate;switch (custGroup) {case20:amountCur = amountCur * 20;break;case40:amountCur = amountCur * 40;case60:amountCur = amountCur * 60;default:amountCur = custTrans.AmountCur; }this.insertSampleReportTmp(); }}Create a new Microsoft Dynamics AX reporting project from VS 2010 and name it RDPBasedReport. Adda report item to the project by right clicking on the Project. Change the report name toRDPBasedReport. Create a new data set and name it SampleRDPReportDS. Now open the propertiespage for the newly created dataset by clicking Ctrl + Enter. Set the data source type to ‘Report DataProvider’. Select the query property and click the ellipses to open the RDP class selection window. Fromthe list of classes, select your RDP class which was SampleReportDP and then click next. Afterwards,select all the fields and then click OK. You report should match with the following screen shot:
  20. 20. Notice the query mentioned in the Query property of dataset. It is the syntax for mentioning RDP classand temp table in the query property whenever you use the report data provider as data source type.Add the new report to AOT by right clicking on the report project. Now deploy the report by right clickon the report solution and select deploy solution to deploy the SSRS report on report server.Create a new output menu item, and name it RDPBasedReport. Set its properties as shown below:Now right click on the menu item and select Open to launch the SSRS report we have just developed.The report output should match with the below screen shot:
  21. 21. 6. Using Controller ClassFollowing table describes the scenarios and suggests the proper way of using controller class in SSRSreports:Scenario Suggested approachQuery is modified based on caller args before Create controller class and overridereport dialog is rendered. prePromptModifyContract().Report contract need to be modified prior to Create controller class and overriderunning of the report. preRunModifyContract()If you don’t want to show the report parameter UI. Create controller class and in main method, before calling startOperation method, call controller.parmShowDialog(false). 6.1. Examples of controller class usageBelow, I will discuss some examples of controller class. 6.1.1. HcmEmployeeLeaveControllerIn this class the controller class is use to modify the report query before the report is run. Below is thecode in preRunModifyContract() method:Whenever you need to modify the report query before report execution, you need to override thismethod in your controller class. This method is called by the framework. In the above example, the localmethod setRanges is called which will modify the report query accordingly.Note that the controller class must extend from SrsReportRunController class. In the main method ofcontroller class, parmReportName method is used to specify the name of the report you want to run.Support if an SSRS report has two designs, then you can run either of them by specifying here the fullyqualified report name. The startOperation() method is used to run the report. Below is the main methodof the HcmEmployeeLeaveController class:The value of the #ReportName macro is HcmEmployeeLeave.Report declared in classDeclaration.
  22. 22. 6.1.2. BankDepositSlipControllerThis class uses theprePromptModifyContract method to modify the report query before the reportdialog is rendered. Following is the code written in prePromptModifyContract method:The setRanges method has been called here which will modify the report query before the report dialogis rendered. 6.1.3. Suppressing the report dialogIf you want to suppress the report dialog and want to open the report directly, add the following line ofcode in the main method of controller class before startOperation() method call.Controller.parmShowDialog(false); 7. Data Contract class for SSRS ReportsThe contract class is written to provide grouping and validation for report parameters. The contract classis also needed when custom dialog fields need to be shown on the report dialog i.e. the field is not areport parameter.Now I show you some of the existing contract classes in AX and discuss them. Take alook at the LedgerEncumbranceReconciliationContract class. Following is the screen shot which showsall the parm methods and a validate method.The parm methods represents the report parameters and the validate method use to validate the reportparameters. Notice the contract class implements theSysOperationValidatable interface. It is necessary,if you are going to provide validation on report parameters. After that you need to override the validatemethod on the contract class.
  23. 23. 7.1. Defining label and help text for parametersLabel and help text for report parameters can be defined through attributes on the data contract class.Before the definition of each parm methods, label and help text attributest can be defined. Followingcode snippet shows an example of defining label and help text attributes for report parameters:[AifDataMemberAttribute(DifferencesOnly),SysOperationLabelAttribute(literalstr("@SYS57830")),SysOperationHelpTextAttribute(literalstr("@SYS328295"))]publicbooleanparmDifferencesOnly(boolean _differencesOnly = differencesOnly){differencesOnly = _differencesOnly;returndifferencesOnly;}The SysOperationLabelAttribute attribute is used to define label for report parameter andSysOperationHelpTextAttribute is used to define help text for report parameter.

×