Welcome to Dynamics AX 2012 blog for learning, sharing and transferring dynamics AX knowledge and all related topics to AX for example Business Intelligence (SSRS & SSAS), SQL, Workflow, SharePoint, ALL Dynamics AX Reporting tools, AX Integration ( AIF, Web Service, ...)
Set up excise taxes in Dynamics AX
Microsoft Dynamics 365: What You Need to Know
Microsoft’s New Approach to Business Applications
A New Licensing Model
What People Are Saying about Dynamics 365
How to Call Report from Dynamics AX 2009
After you created your report in AX you can call report from AX form by follow the below steps:
1- Create menu item with type output by drag and drop report to MenuItems nodes under AOT.
2- Open the form that you need to call report from.
Note: the form should be have dataSource with the table in report
3- Drag and Drop menu Item created in step 1 in the form under any button group.
4- Add the following method to Report
void initFromCaller(Args _args)
{
str QrderId; // field used as Rang and used to filter data
QueryBuildDataSource qbds; // should be represent report datasource and selected record in the form
;
if (! _args ||
! _args.caller() ||
_args.dataset() != tablenum(TableName) )
return;
QrderId = _args.record().(fieldnum(TableName,FieldName));
qbds = element.query().dataSourceTable(tablenum(TableName));
if(!qbds.findRange(fieldnum(TableName,FieldName)))
{
qbds.addRange(fieldnum(TableName,FieldName)) ;
}
qbds.findRange(fieldnum(TableName,FieldName)).value(queryvalue(QrderId));
}
Inventory Closing slow
May The below link lead you to solve Dynamics ax closing slowness issue by creating new indexes in the main tables used in the recalculation and closing process in Dynamics ax.
Inventory Closing slow:
Optimize AX 2013 R3 Virtual Machine Solution Demo On Laptop
while I was searching about the best solution to run Dynamics AX 2012 R3 Virtual machine by Hyper V or Virtual box I found the link below, and think it will be useful for all.
http://daxetlbi.blogspot.com/2014/09/optimize-ax-2013-r3-virtual-machine.html
Troubleshooting Report Issues -AX 2012
All of us facing many issues while installing, deployment and customize AX 2012 reports. the Table below include most of troubleshooting of AX reports.
Source : https://technet.microsoft.com/en-us/library/gg731894.aspx
| Issue | Additional information for troubleshooting | ||
| The report is broken for any reason and the data source is a query. | Execute the query outside of the report. Confirm that the query returns expected results. Use a form, job, or Query Services to test the query. For more information, see Query Service. | ||
| The report is broken and the data source is a report data provider (RDP) class. | Debug the class. For more information, see How to: Configure the Debugger to Debug a Report Data Provider Class. | ||
| When you preview the report you receive the following error: No report data table with name <dataset table name> exists in report schema for data provider <RDP name>. | Verify that the report is bound to tables that exist and do not bind multiple datasets to a single report data provider class. Instead, define the report to have the multiple tables pointing to the same dataset. | ||
| No data was returned in the report. | Verify you have the right company, that there is data entered for that company, and that the user has access to the expected data. | ||
| The report has a rendering error. When you try to run the report, you receive an error like the following: An error has occurred during report processing. | The SSRS Execution Account password could be invalid.
| ||
| The report labels do not display, or the report shows label IDs, like Labels!@SYS24426 instead of the label values. | The SSRS Service Account password could be invalid.
| ||
| When running a report that uses an enumeration value as a multi-value parameter of a report, you get an error like the following: The ‘ParameterName’ parameter is missing a value. | Set the Data Type property of the enumeration parameter to Integer. This is because the label value of enumeration items are converted to name values in theSrsReportDataContractUIBuilder.getMultiSelectFromDialogField method. | ||
| When building a report project that uses a SQL report data source, you receive the following error: The report does not have the mandatory framework parameter AX_ReportContext. | Manually create the AX_ReportContext report parameter. For more information, see Walkthrough: Creating a Report with Parameters. | ||
| Time values in a report bound to an AOT query are displayed as h:mm:ss tt in Visual Studio preview and the Microsoft Dynamics AX client instead of the actual time. | Select the field in the report design and set the following properties:
| ||
| An AOS connection error message indicates you cannot establish a connection to the AOS. | To delete, rename, save, or restore a report model element, you must have a connection to the Application Object Server (AOS). If the AOS is disconnected or stops running after a reporting project is opened, an AOS connection error message will display. To continue, restart or restore the connection to the AOS, and then repeat the command that failed. | ||
| The Undo command is not functioning in the report model. | In Model Editor, only unsaved commands can be undone. Once a command is saved, it cannot be undone by using the Undo command. To revert a saved command, you must manually modify the report element. If you are using source code control, another option is to discard the file that is checked out if no other changes have been made. | ||
| The saved report model customization is not visible in Application Explorer. | Application Explorer does not automatically refresh as Model Editor saves changes to the model store database. To view changes in Application Explorer, right-click the model element, and then click Refresh. | ||
| The saved report model customization is not visible in the AOT. | The AOT does not automatically refresh as Model Editor saves changes in the model store database. To view changes in the AOT, in the Development Workspace Tools menu, click Development tools, Application objects, and then Refresh runtime model data. | ||
| When previewing a report in Visual Studio you receive the following error: The %0 parameter is missing a value %1 | Verify that you did not create a report with a Labels expression in the Values property of the report parameter. This is not supported because Reporting Services resolves parameter labels after the parameter evaluation and execution occur. --or-- Verify that you did not set the Allow Blank property to True to make the parameter optional. This is not supported for dataset bound parameters by the reporting framework. The following items identify the alternative approaches for OLTP and OLAP reports:
| ||
| The query for the report was changed but the report does not reflect the change. | After you run the report, the query and ranges are cached in the SRSReportQuery table. To refresh the cache, you must manually delete all records in the SRSReportQuery table for any reports or report parameters that use the query that was changed. | ||
| Locking or hiding a range for a report parameter is not working. At runtime, the parameter is enabled and the user is able to filter on the range. This occurs when a report is bound to a query that has a range value with a Status property value of Locked or Hidden. | SQL Server Reporting Services does not honor the query range Status property. | ||
| The Label reference does not display properly. The Value property is set to theParameters!MyParm.Value parameter. | The parameter must be explicitly bound to data using a dataset in the Visual Studio Tools for Microsoft Dynamics AX report model. | ||
| The parameter is explicitly bound to datasets with two columns, label and value. The value displays properly. The Label reference displays properly everywhere except in the client. | The report viewer control does not support the ability to specify report parameter labels, only values. | ||
| When you build a Visual Basic project for a report, the project does not build. -or- You receive the error “The business logic assembly ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null does not contain a class for report Report1.” | You must clear out the namespace setting of the Visual Basic project. In Solution Explorer, right-click the project, and then clickProperties. In the Application area, delete the text in the Root namespace field. | ||
| In Visual Studio, you build a project and receive the error, “System.InvalidOperationException: Object is currently in use elsewhere.” | This error indicates a synchronization issue. Close the solution and then rebuild the report. | ||
| When you debug a C# data method, the SQL Server Reporting Services server crashes. | This is a known issue if you are debugging a C# data method on a machine that is running a 64 bit operating system. To work around this issue, open Visual Studio 2008, load the C# file, set the break point, and then attach to the Reporting Services process. For more information, see Debugging Managed Code in Microsoft Dynamics AX. | ||
| Reports that run for more than ten minutes time out. For example:
Timeout error occured when calling AOS service. Use Dynamics AX Client Configuration Utility to change WCF configuration values. Exception details: The request channel timed out while waiting for a reply after 00:00:59.9449945. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. | See Tips to help prevent long-running reports from timing out. | ||
| Errors are generated when reports are saved to a file, printed to a printer, or emailed. | View the detailed error messages that are recorded for the Reporting module in the Exceptions form. Click System administration > Periodic > Services and Application Integration Framework > Exceptions. | ||
| The same report contains different information when saved to different file formats. For example, a sales invoice report that is saved to an .HTML file may contain header information, line items, and totals. When the same report is saved to an .XML file, it may contain only the line items and totals. | This is by design. For more information about how reports are rendered in the available file formats, see Exporting Reports (Report Builder 3.0 and SSRS) in the SQL Server documentation. | ||
| Users receive the following error when clicking on a drill-through link on a report in Enterprise Portal: [CompanyName] is not a valid company. Check the value and try again. | This situation may occur when Reporting Services 2008 or Reporting Services 2008 R2 is running in SharePoint integrated mode. To resolve this issue, install Reporting Services 2008 R2 with Service Pack 2.
| ||
| Tables are not aligned correctly when viewing reports in right-to-left (RTL) languages. | This is a known issue with the Reporting Services tablix control. For more information about the issue, see Known Issue: Dynamic Precision designs spacing issues in RTL languages in the Microsoft Dynamics AX Business Intelligence blog. | ||
| The Reporting Services extensions become unusable when additional Reporting Services instances are installed on the same computer. As a result:
| To resolve this issue, configure all the Reporting Services instances on the computer. For more information about how to install and configure multiple instances of Reporting Services on the same computer, see Install multiple instances of Reporting Services on the same computer (for use with Microsoft Dynamics AX). | ||
| When printing a report that has been saved as a PDF file, the printer page size does not correspond to the PDF page size. | To resolve this issue, select the Choose paper source by PDF page size check box in the Print window that is displayed when printing the report to the printer. | ||
| When using an environment that includes a hardware load balancer, such as F5, reports that run for more than five minutes time out. | To resolve this issue, adjust the timeout period specified in the hardware load balancer. For example, if you are using F5, set theIdle Timeout field to 7200 seconds or higher. For more information, see the F5 Knowledge Base. | ||
| You need to adjust the alignment of a report. | For tips on adjusting the alignment, see this blog post: SSRS report tips to adjust alignment for pre-formatted print stock (i.e. 1099-MISC form). |
Dynamics AX Workflow types - AX 2012
To create a workflow, you must first select the type of workflow that you want to create. This topic lists the types of workflows that you can create in each module. The topic also describes what each type of workflow is used for, and whether the workflows of each type are associated with a specific company in the organization or with the whole organization.
Data Import/Export Framework error
Troubleshoot issue with a Data Import/Export Framework installation from cumulative update 7 for Microsoft Dynamics AX 2012 R2
After you install cumulative update 7 for Microsoft Dynamics AX 2012 R2, the Data Import/Export Framework appears to be installed, but you receive error messages when many forms are opened like the following:
You receive an “Assembly containing type Microsoft.Dynamics.AX.DMF.ServiceProxy.DmfEntityProxy is not referenced.” error
Reason: When you install cumulative update 7 for Microsoft Dynamics AX 2012 R2, the Data Import/Export Framework appears to be installed for members of the System Administrators role. However, the binary components of the framework are not present.
Solution:
Performance considerations for number sequences in Dynamics AX
Consider the following information about how the configuration of number sequences can affect system performance before you set up number sequences.
Continuous and non-continuous number sequences
Number sequences can be continuous or non-continuous. A continuous number sequence does not skip any numbers, but numbers may not be used sequentially. Numbers from a non-continuous number sequence are used sequentially, but the number sequence may skip numbers. For example, if a user cancels a transaction, a number is generated, but not used. In a continuous number sequence, that number is recycled later. In a non-continuous number sequence, the number is not used.
Continuous number sequences are typically required for external documents, such as purchase orders, sales orders, and invoices. However, continuous number sequences can adversely affect system response times because the system must request a number from the database every time that a new document or record is created.
If you use a non-continuous number sequence, you can enable Preallocation on the Performance FastTab of the Number sequences form. When you specify a quantity of numbers to preallocate, the system selects those numbers and stores them in memory. New numbers are requested from the database only after the preallocated quantity has been used.
Unless there is a regulatory requirement that you use continuous number sequences, we recommend that you use non-continuous number sequences for better performance.
Automatic cleanup of number sequences
In case of a power failure, an application error, or other unexpected failure, the system cannot recycle numbers automatically for continuous number sequences. You can run the cleanup process manually or automatically to recover the lost numbers.
Carefully consider server usage when you plan the cleanup process. We recommend that you perform the cleanup as a batch job during non-peak hours.
Configure the workflow notification options [AX 2012]
Notifications may be sent to you when workflow-related events occur. For example, a notification may be sent to you when a document is assigned to you for approval or when the workflow process is completed for a document that you submitted. You can specify how you want to receive workflow notifications.
-
Click File > Tools > Options.
-
In the left pane of the Options form, click Notifications.
-
In the Receive notifications every (minutes) field, enter the number of minutes to specify how often you want to receive notifications.
-
In the Line-item notification type list, specify how you want to receive workflow notifications for line items from the following options:
-
Grouped – Notifications for line items are grouped into a single notification.
-
Individual – A notification is sent for each line item.
-
-
To receive notifications in the Microsoft Dynamics AX client, select the Show notifications in the Microsoft Dynamics AX client check box.
If you select the Show notifications in the Microsoft Dynamics AX client check box, you can also specify whether you want to receive notifications as pop-up messages. To receive pop-up messages, select the Show pop-ups for notifications check box.
-
To receive notifications as email, select the Send notifications in email check box.
Walkthrough: Creating a Report Bound to a Report Data Provider Class (X++ Business Logic) [AX 2012]
In this walkthrough, you use a report data provider (RDP) class with business logic to process data and then display the outcome of the business logic on a report.
An RDP class is an X++ class that is used to access and process data for a Reporting Services report. The options for a data source type for a Microsoft Dynamics AX report are query, business logic, and RDP. An RDP class is an appropriate data source type when the following conditions are met.
- You cannot query directly for the data you want to render on a report.
- The data to be processed and displayed is from Microsoft Dynamics AX.
The following illustration is a preview of the report that you create in this walkthrough.
| The data that displays in your report may vary depending upon the sample data that is available to you. |
The following elements are required to set RDP as your data source type.
- Temporary table – RDP class fills a temporary table with data that will be used by Reporting Services to display the report.
- Data contract class – defines the parameters in the report.
- Report data provider class – processes business logic based on parameters and a query, and then returns the tables as a dataset for the report.
This walkthrough illustrates the following tasks:
- Creating a temporary table
- Defining a report data provider class
- Defining the report parameters
- Defining a method to return data to Reporting Services
- Adding business logic for the report
- Creating a reporting project
- Binding a report to a report data provider class
Creating a Temporary Table
Data for an RDP report is preprocessed and then stored in a temporary table. The temporary table is used by Reporting Services when the report is displayed. A table returned by a method can be a temporary table (InMemory or TempDB) or a regular table. When the data returned is used for reporting only, it is a best practice to use a temporary table.
- Use an InMemory temporary table if the dataset is small, for reports that will display fewer than 1000 records.
- Use a TempDB temporary table for large datasets to improve performance.
In this section you will create a temporary table to store the data for the report.
To create a temporary table
- In the AOT, expand the Data Dictionary node, right-click the Tables node, and then click New Table.
- Right-click the table, and click Properties.
- In the Properties window, set the Name property to TmpCustTableSample and set the Table Type property to TempDB. This will define the table as a SQL Server temporary table.
- Expand the node next to the TmpCustTableSample table so that you can see the Fields node.
- Press Ctrl+D to open another AOT window and move the window so you can see both AOT windows.
- In the second AOT, expand the Data Dictionary node, expand the Extended Data Types node, and drag the following types to the Field node in the first AOT window:
- AccountNum
- CustName
- LogisticsAddressing
- CustGroupId
- Phone
- CustInvoiceAccount
- ActionDays
- InclTax
- In the second AOT window, expand the Base Enums node and drag the CustAccountStatement enumeration to the Fields node of the first AOT window.
Defining a Report Data Provider Class
The RDP class is a data provider that allows you to add business logic for the data that is displayed on a report. The business logic for this example prompts the end user for parameter values, processes business logic to generate data in a table, and then returns the table to render in the report. In this section, you define the RDP class by extending the SRSReportDataProviderBase class. Then add the TmpCustTableSample table as a global variable. The following list describes the attributes that are attached to the RDP class for this example:
- Attach the SRSReportQueryAttribute attribute to specify the query to use to get the data for the report.
For this example, set the attribute to the Cust query.
- Attach the SRSReportParameterAttribute attribute to specify the data contract class that defines the report parameters for the report.
For this example, set the attribute to the SrsRDPContractSampledata contract.
To define a report data provider class
- In the AOT, right-click the Classes node, and then click New Class.
- Right-click the new class, click Rename, and then enter SrsRDPSampleClass.
- Expand SrsRDPSampleClass, right-click classDeclaration, and then click View Code.
- In code editor, enter the following code in the class declaration to define the class.
X++
[
SRSReportQueryAttribute (querystr(Cust)),
SRSReportParameterAttribute(classstr(SrsRDPContractSample))
]
public class SrsRdpSampleClass extends SRSReportDataProviderBase
{
TmpCustTableSample tmpCust;
}
Defining a Data Contract Class
An RDP class must have a data contract if the report has one or more report parameters. This example defines three report parameters for account number, account statement, and whether to include tax. When you print the report, you can specify which data to print based on the report parameters. For example, you can specify to only print transactions for account number 4000.
A data contract is an X++ class with getters, setters, and the DataMemberAttribute attribute. The data contract defines the parameters that the report uses.
To define a data contract class
- In the AOT, right-click the Classes node, and then select New Class.
- Right-click the new class, click Rename, and then enter SrsRDPContractSample.
- Expand SrsRDPContractSample, right-click classDeclaration, and then click View Code.
- In code editor, enter the following code in the class declaration to define the class.
X++
[DataContractAttribute]
public class SrsRDPContractSample
{
AccountNum accountNum;
CustAccountStatement accountStmt;
boolean inclTax;
}
A data contract class has methods with the DataMemberAttribute attribute. The name that follows this attribute is the parameter name that displays in Visual Studio when you bind a report data set to the RDP class. In this section, add a method for each of the report parameters and name them parmAccountNum, parmAccountStmt, and parmInclTax.
To define data contract methods
- Right-click SrsRDPContractSample, point to New, and then click Method.
- Edit the method so that it contains the following code.
X++
[DataMemberAttribute("AccountNum")]
public AccountNum parmAccountNum(AccountNum _accountNum = accountNum)
{
accountNum = _accountNum;
return accountNum;
}
- Right-click SrsRDPContractSample, point to New, and then click Method.
- Edit the method so that it contains the following code.
X++
[DataMemberAttribute("CustAccountStatement")]
public CustAccountStatement parmAccountStmt(CustAccountStatement _accountStmt = accountStmt)
{
accountStmt = _accountStmt;
return accountStmt;
}
- Right-click SrsRDPContractSample, point to New, and then click Method.
- Edit the method so that it contains the following code.
X++
[DataMemberAttribute("InclTax")]
public boolean parmInclTax(boolean _inclTax = inclTax)
{
inclTax = _inclTax;
return inclTax;
}
Defining a Method to Return Data to Reporting Services
A method to return the processed data in the temporary table to Reporting Services is needed. In this section, add a method named getTmpCustTable and attach the SRSReportDataSetAttribute attribute to indicate the dataset for the report.
To define a method to return the data to Reporting Services
- Right-click SrsRdpSampleClass, point to New, and then click Method.
- Edit the method so that it contains the following code.
X++
[SRSReportDataSetAttribute("TmpCust")]
public TmpCustTableSample getTmpCustTable()
{
select * from tmpCust;
return tmpCust;
}
Adding Business Logic for the Report
The business logic for this example prompts the end user for parameter values, processes business logic to generate data in a table, and then returns the table to render in the report.
The report business logic is provided in the processReport method. This method is called by Reporting Services at runtime. The following example illustrates how the processReport method computes data and populates the data table that is returned to Reporting Services. In this section, override the processReport method to provide business logic for your report.
To add business logic for the report
- Right-click SrsRdpSampleClass, point to Override method, and then click processReport.
- Edit the method so that it contains the following code.
X++
public void processReport()
{
AccountNum accountNumber;
CustAccountStatement custAcctStmt;
boolean boolInclTax;
Query query;
QueryRun queryRun;
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
CustTable queryCustTable;
SrsRdpContractSample dataContract;
// Get the query from the runtime using a dynamic query.
// This base class method reads the query specified in the SRSReportQueryAttribute attribute.
query = this.parmQuery();
// Get the parameters passed from runtime.
// The base class methods read the SRSReportParameterAttribute attribute.
dataContract = this.parmDataContract();
accountNumber = dataContract.parmAccountNum();
custAcctStmt = dataContract.parmAccountStmt();
boolInclTax = dataContract.parmInclTax();
// Add parameters to the query.
queryBuildDataSource = query.dataSourceTable(tablenum(CustTable));
if(accountNumber)
{
queryBuildRange = queryBuildDataSource.findRange(fieldnum(CustTable, AccountNum));
if (!queryBuildRange)
{
queryBuildRange = queryBuildDataSource.addRange(fieldnum(CustTable, AccountNum));
}
// If an account number has not been set, then use the parameter value to set it.
if(!queryBuildRange.value())
queryBuildRange.value(accountNumber);
}
if(custAcctStmt)
{
queryBuildRange = queryBuildDataSource.findRange(fieldnum(CustTable, AccountStatement));
if (!queryBuildRange)
{
queryBuildRange = queryBuildDataSource.addRange(fieldnum(CustTable, AccountStatement));
}
// If an account statement has not been set, then use the parameter value to set it.
if(!queryBuildRange.value())
queryBuildRange.value(int2str(custAcctStmt));
}
if(boolInclTax)
{
queryBuildRange = queryBuildDataSource.findRange(fieldnum(CustTable, InclTax));
if (!queryBuildRange)
{
queryBuildRange = queryBuildDataSource.addRange(fieldnum(CustTable, InclTax));
}
// If flag to include tax has not been set, then use the parameter value to set it.
if(!queryBuildRange.value())
queryBuildRange.value(int2str(boolInclTax));
}
// Run the query with modified ranges.
queryRun = new QueryRun(query);
ttsbegin;
while(queryRun.next())
{
tmpCust.clear();
queryCustTable = queryRun.get(tablenum(CustTable));
tmpCust.AccountNum = queryCustTable.AccountNum;
tmpCust.CustName = queryCustTable.name();
tmpCust.LogisticsAddressing = queryCustTable.address();
tmpCust.CustGroupId = queryCustTable.CustGroup;
tmpCust.Phone = queryCustTable.phone();
tmpCust.CustInvoiceAccount = queryCustTable.InvoiceAccount;
tmpCust.CustAccountStatement = queryCustTable.AccountStatement;
tmpCust.InclTax = queryCustTable.InclTax;
tmpCust.insert();
}
ttscommit;
}
Creating a Reporting Project
Next, create a reporting project in Microsoft Visual Studio. When you create a reporting project, you use the Report Model to create a Reporting Services report.
To create a reporting project
- Open Microsoft Visual Studio.
- On the File menu, point to New, and then click Project. The New Project dialog box displays.
- In the Installed Templates pane, click Microsoft Dynamics AX. In the Templates pane, click Report Model.
- In the Name box, type SampleRDPReport, and in the Location box, type a location.
- Click OK.
A reporting project contains a report model where you can add a report to the model.
Binding a Report to a Report Data Provider Class
Now that you have created a reporting project, you are ready to define an auto design report that displays data from the Cust query. The following procedure explains how to create an auto design report that uses the RDP class as the data source.
To create an auto design report
- In Solution Explorer, right-click the ReportModel node, point to Add and then click Report.
- In Model Editor, right-click the Report1 node, and then click Rename.
- Type CustomerReport as the name.
- Right-click the Datasets node, and then click Add Dataset.
- In the Properties window, specify the following values.
| Property | Value | ||
| Data Source | Dynamics AX | ||
| Data Source Type | Report Data Provider | ||
| Default Layout | Table | ||
| Dynamic Filters | True
| ||
| Name | Customer | ||
| Query | Click the ellipsis button (…). A dialog box displays where you can select an RDP class that is defined in the AOT and identify the fields that you want to use. Select the SrsRDPSampleClass class and click Next. In the Select Fields dialog box, keep all the checkboxes selected, and click OK.
|
- In Model Editor, select the Customer node and drag it onto the Designs node. An auto design named AutoDesign1 is created for the report.
| If you expand the Parameters node you see the parameters that you defined in the data contract class. When you define nested data contract parameters, they are listed under the Parameters node also. Select the SrsRDPSampleClass_DynamicParameter parameter. In the Properties window, the AOT Query property is set to the query specified in the parmQuery method in the RDP class. |
- Select AutoDesign1 and then click the Preview button.
- Enter a value for Account number and Account statement that returns data and then click the Report tab to preview the report.
| You can use * to display all of the account numbers on the report. Account statement is an enumeration and there is no wild card value for enumerations. Check your sample data to determine a valid enumeration value for Account statement. The Select button displays because you set the Dynamic Filters property to True on the dataset. You have the option to click the Select button to specify a range to filter the report and limit the data that displays on the report. |
The next steps are to add layout and style templates, deploy, and add the report to a menu item so you can see it in Microsoft Dynamics AX.
Description of the main processing steps that are performed by the Inventory Close and the Inventory Recalculation in Dynamics AX
When you run the Inventory Close routine or the Inventory Recalculation routine in Microsoft Dynamics AX, Microsoft Dynamics AX performs a sequence of steps in their processing.
Steps that are performed by the Inventory Close routine
When you run the Close routine, Microsoft Dynamics AX performs the following steps:- Check whether any Recalculations were run after the date that you choose for your Close. Microsoft Dynamics AX will cancel any of those later Recalculations before the Close can start.
- Put all the items that are to be processed into a queue. These items are stored in the InventCostList table.
Note While a Close or Recalculation is processing, you can click Calculation/Calculation List from the Close & adjustment form to view the data in the InventCostList table. This shows which items are still to be processed by the Close or Recalculation process. - Process each item from that queue sequentially. Microsoft Dynamics AX performs the following for each item:
- Settle individual receipts and issues against one another for the item according to the Inventory Model Group such as FIFO, Weighted Average.
- Make any required cost adjustments to the issue that was settled based on the cost of the receipt(s) against which the issue was settled.
- Update the inventory transactions to show the settlement and cost adjustment data.
- Write the settlement data into the Inventory Settlement table. The data will include records that show explicitly which Receipt(s) were settled to each Issue in addition to any cost adjustment that is made to the Issue that is settled.
- As soon as all possible transactions are processed for that item, Microsoft Dynamics AX looks for any transactions that are fully settled, and then update those transactions to "Closed." For more information, see the "What fields show that an inventory transaction is closed" section.
- Settle individual receipts and issues against one another for the item according to the Inventory Model Group such as FIFO, Weighted Average.
- As soon as all the items are processed, the settlement records that were created are read and sorted by General Ledger Account. Then, Microsoft Dynamics AX summarizes all the cost adjustments that were made, and a General Ledger Journal is created and posted.
- If you select the Run recalculation after closing check box in the Close dialog box, a Recalculation will be run for all items up to today's date.
Steps that are performed by the Inventory Recalculation routine
The Inventory Recalculation routine does a similar job to the Inventory Close routine. However, there are a few differences. When you run the Recalculation routine, Microsoft Dynamics AX performs the following steps:- Check whether any Recalculations were run after the date that you choose to run your Recalculation up to. Microsoft Dynamics AX will cancel any of those later Recalculations found before your Recalculation routine can start.
Notes- In the Select dialog box, you can select item(s) for which you want to run the Recalculation, unlike the Close routine that always processes all items.
- While a Recalculation or Close is processing, you can click Calculation/Calculation List from the Close & adjustment form to view the data in the InventCostList table. This shows which items are still to be processed by that Close or Recalculation.
- Put all the items that are to be processed into a queue, and then store the queue in the InventCostList table.
- Process each item from that queue sequentially. Microsoft Dynamics AX performs the following for each item:
- Make a "virtual" settlement between individual receipts and issues for the item according to the Inventory Model Group such as FIFO, Weighted Average. This is a "virtual" settlement because it is occurs in the Recalculation’s calculations. However, the detailed settlement data that shows the explicit matching of each issue to the various receipts is not stored in the InventSettlement table. The only data that is stored is the cost adjustment that is made to the issue.
- Make any required cost adjustments to the issue that was settled based on the cost of the receipt(s) against which the issue was settled.
- Write a single settlement record for any cost adjustment that is made for that Issue into the Inventory Settlement table.
- Make a "virtual" settlement between individual receipts and issues for the item according to the Inventory Model Group such as FIFO, Weighted Average. This is a "virtual" settlement because it is occurs in the Recalculation’s calculations. However, the detailed settlement data that shows the explicit matching of each issue to the various receipts is not stored in the InventSettlement table. The only data that is stored is the cost adjustment that is made to the issue.
- As soon as all the items are processed, the cost adjustment settlement records that were created are read, sorted by General Ledger Account, and summarized and posted in a General Ledger Journal.
What fields show that an inventory transaction is closed
To show that an inventory transaction is "closed", Microsoft Dynamics AX performs the following:- When the Inventory Close routine has fully settled the Quantity and Financial Cost of a specific inventory transaction, Microsoft Dynamics AX updates the individual inventory transaction to show that the transaction is "closed."
- For a transaction to be closed, it must meet the following criteria:
- The "Quantity" must match the "Quantity Settled."
- The sum of "Cost Amount Posted" plus "Cost Amount Adjustment" must match the "Cost Amount Settled."
- When those conditions are met, then the Close program will do the following:
- Set the field "Value Open" from "Yes" to "No."
- Store the date of the close in the field "Date Closed."
How to: Create a Workflow Task AX 2012
A Microsoft Dynamics AX workflow task is a single unit of work that must be performed. A workflow may contain one or more tasks.
The following procedure describes how to create a new workflow task in the AOT.
To create a workflow task
- In the AOT, expand the Workflow node.
- Right-click the Tasks node, and then click Add-Ins > Task wizard. The Workflow wizard is displayed. This wizard will help you create a new workflow task.
- Click Next.
- Set the following values for the wizard.
| Value | Description |
| Name | The name that will be used for the workflow task. |
| Workflow document | The class that defines the workflow document for which you are creating a task. This setting must match the Document property setting used in the workflow type for the task. |
| Document preview field group | The initial set of fields displayed in the unified work list. Select a field group from the root table specified in the Workflow document that you selected. The Workflow document value must be set before you can select a field group. |
| Document menu item | Choose the menu item that points to the main form that displays the document for which you are creating a workflow task. |
| Document web menu item | Choose the web menu item that points to the Enterprise Portal page that displays the document for which you are creating a workflow task. |
- Specify which types of menu items you want to create. You can create menu items for the Microsoft Dynamics AX client, web menu items for Enterprise Portal, or items for both.
- Click Next.
- Define the task outcomes. For each outcome that you want to support, supply a Name for the outcome. The name cannot contain spaces. Specify the Type for the outcome. Choose one of the following types:
- Complete - Completes the workflow task and continues the workflow forward.
- Return - Returns the task to the originator for changes and then resubmission back to workflow.
- RequestChange - Sends the task to a specified user for changes and then resubmission back to workflow.
- Deny - Completes the task as denied and continues the workflow forward.
Click Add.
| Note Each task must have one outcome of type Complete. |
- After you have finished defining the outcomes, click Next. A list of all of the resources that will be created for the workflow task is displayed.
- Click Finish to create the resources. The wizard will create classes, menu items, web menu items, the task, and a project that contains all of the items.
- A dialog box will be displayed that indicates the status. Click OK. The project that contains the workflow type resources is displayed.
After a workflow task is created, you can add the workflow task to the Supported Elements node of a workflow type.
About Workflow Development [AX 2012]
Workflow is defined as the movement of documents or tasks through a work process. In Microsoft Dynamics AX, the focus of workflow is on approval and task-oriented workflows. The developer role in Microsoft Dynamics AX is primarily to add workflow to existing business documents or create new documents that support workflow. This topic describes what the workflow life cycle is and the developer role for a workflow in Microsoft Dynamics AX.
Workflow can be described as structured or unstructured. In Microsoft Dynamics AX, workflow is structured and based on user interaction and system automation of business data. For example, when a purchase requisition (business data) is created it, workflow can be used to verify and approve the data.
Workflow Lifecycle
All workflows follow a basic life cycle as shown in the following illustration.

You design the workflow based on customer requirements. The company administrator configures the workflow, and users run the workflow. This section describes the some of the main development concepts used in the design section of the workflow life cycle in Microsoft Dynamics AX.
Workflow types
The workflow type is a building block that can be used to create customized workflows that enforce business policies. The workflow type is defined in the Application Object Tree (AOT) at design time. The metadata from the workflow type is used by the customer to create a workflow configuration.
Workflow configurations
Workflow configurations are created by application administrators that use the Microsoft Dynamics AX workflow editor. The administrator configures the workflow, workflow elements, and approval steps that control the flow of the business document though the workflow process.
Workflow instances
A workflow instance is created by the workflow runtime when a workflow is activated.
Workflow elements
The elements of a workflow are created by you in the AOT and configured by application administrators. The workflow structure consists of sequences of workflow elements. An element can be a task, automated task, approval, or a sub-workflow.
Approvals are specialized workflow elements that allow for sequencing of multiple steps, which use a fixed set of outcomes. Tasks are generic workflow elements that represent a single unit of work which use custom outcomes defined by the developer. Automated tasks are workflow elements used to invoke X++ code within the application without requiring human intervention.
Work items
Work items are the units of work created by the workflow at runtime. They are the main interface between the end user who participates in a workflow and the workflow runtime. All work items for users who are logged on are surfaced in the Unified Work List and are used to inform a user about work assignments.
Developer Role
You must create the workflow artifacts, dependent workflow artifacts, and business logic to support the workflow. The following sections describe most of the developer artifacts used in a Microsoft Dynamics AX workflow.
Workflow Artifacts
-
Workflow type
-
Define the workflow document.
-
Define event handlers for workflow Started, Completed, ConfigDataChanged, and Canceled.
-
Define menu items used for the workflow type like Submit.
-
Define the workflow category.
-
Define required approvals, tasks, and automated tasks.
-
Enable and disable activation conditions.
-
-
Workflow category
-
Define the module that the workflow type is enabled in.
-
-
Approval
-
Define the approval workflow document.
-
Define approval event handlers for Started and Canceled.
-
Define approval menu items such as Document, Resubmit, and Delegate.
-
Enable or disable fixed approval outcomes.
-
Define approval outcome menu items for Action and ActionWeb.
-
Define approval outcome event handler.
-
Define the DocumentPreviewFieldGroup.
-
-
Task
-
Define the task workflow document.
-
Define task event handlers for Started and Canceled.
-
Define task menu items for Document, DocumentWeb, Resubmit, ResubmitWeb, Delegate, and DelegateWeb.
-
Enable or disable task outcomes.
-
Define task outcome menu items for Action and ActionWeb.
-
Define task outcome event handler.
-
Define the DocumentPreviewFieldGroup.
-
-
Automated Task
-
Define the automated task workflow document.
-
Define automated task event handlers for Execution and Canceled.
-
Dependent Workflow Artifacts
The following workflow artifacts are dependent upon the type of workflow defined in the AOT.
-
Workflow Document class - identifies the document query and any calculated fields.
-
Document query - defined in the AOT to expose data that is used for conditions in the configuration user interface.
-
-
SubmitToWorkflow class - displays the Submit to Workflow dialog box in the user interface, receives user comments, activates the workflow, and can update workflow state.
-
State model - tracks the state of the document in the workflow process, for example, Submitted, ChangeRequested, or Approved.
-
Event handlers for the workflow itself on the workflow type, approval, approval outcomes, automated task, task, and task outcomes.
-
Action and display menu items as well as classes which determine the action taken when a menu item is selected in the user interface.
-
Custom workflow providers.
-
canSubmitToWorkflow method - required on each table enabled for workflow.
How to: Enable a Form or List for Workflow [AX 2012]
In Microsoft Dynamics AX, each form or list that is to be used by workflow must be enabled for workflow. This topic describes the steps to enable a form for workflow. It also describes the steps to enable a list for workflow.
When a form is enabled for workflow, the workflow menu bar is automatically inserted at the top of the form, below the form title bar or action pane. The workflow menu bar provides everything that you must have to interact with a workflow. The menu bar contains workflow action buttons, such as Submit and Complete, and data fields that contain workflow instructions, configuration name, and information icons.
To display the Submit button, the form must have a canSubmitToWorkflow method.
Note: The form data source, or table, must contain a field for the workflow state of the document. For example, a field that contains the workflow state NotSubmitted should be updated to Submitted when the user clicks the Submit button on the form.
To enable a form for workflow
-
In the Application Object Tree (AOT), expand the Forms node.
-
Expand the form that you want to enable for workflow, and then expand the Designs node.
-
In the Designs node, right-click the Design child node, and then click Properties.
-
In the Properties sheet, set the following properties.
Property Value WorkflowEnabled Set to Yes to enable the workflow menu bar on the form. The default setting is No. WorkflowDataSource Set to the same root data source specified in the query used for the Document property on the workflow type. WorkflowType Set to the workflow type that you want to use for the list. -
In the AOT, right-click the form, and then click Save.
To enable a list for workflow
-
In the Application Object Tree (AOT), expand the Forms node.
-
Expand the form for the list that you want to enable for workflow, and then expand the Designs node.
-
In the Designs node, right-click the Design child node, and then click Properties.
- In the Properties sheet, set the following properties.
Property Value WorkflowEnabled Set to Yes to enable the workflow menu bar on the list. The default setting is No. WorkflowDataSource Set to the same root data source specified in the query used for the Document property on the workflow type. WorkflowType Set to the workflow type that you want to use for the list.
5. In the AOT, right-click the List, and then click Save.
Walkthrough: Adding an X++ Object to a Visual Studio Project [AX 2012]
This walkthrough illustrates the following tasks:
-
Creating the class library, adding a Microsoft Dynamics AX table to the project, and accessing that table from code.
-
Creating a console application project and testing the generated assembly.
Tip: Although this topic shows you how to test the generated assembly from Visual Studio, you can also test it from X++ because after you add the project to the AOT, the classes in the assembly are available from Microsoft Dynamics AX.
Prerequisites
To complete this walkthrough you will need:
-
Microsoft Dynamics AX with Visual Studio Tools and sample data installed
-
Visual Studio 2010
Creating the Class Library
The first step is to create the class library in Visual Studio. After you have created the class library project, you can then add a Microsoft Dynamics AX table to the project. Then you can create class methods that access that table.
To create the class library
-
To create a new class library project, click File > New> Project.
-
Below the Installed Templates tree, click Visual C# > Windows, select the Class Library project type and then click OK.
-
Save the new project.
-
Add the project to the AOT by clicking File > Add ClassLibrary1 to AOT. Notice that the project icon changes in Solution Explorer. Alternatively, you can right-click the ClassLibrary1 project and select Add ClassLibrary1 to AOT.
To add a Microsoft Dynamics AX table to the project
-
Open the Application Explorer by clicking View > Application Explorer. Expand the Data Dictionary > Tables node and locate the CustTable table.
-
Click the CustTable table and drag it onto the project in Solution Explorer. Alternatively, you can right-click the table and then click Add to Project. In Solution Explorer, you can see that the table and a proxy to the CustTable table are created internally by the system. In the References node you can see a reference to the assembly Microsoft.Dynamics.Ax.ManagedInterop.
Tip: You can add a system table or system class to your Visual Studio project even if the interface does not support the dragging of system objects. For example, to add the FormRun system class, first add any application class, such as the Bank class. Then rename the new proxy node from Class.Bank.axproxy to Class.FormRun.axproxy.
To create methods that use the table
-
Open the Class1.cs file and add the following code. This code contains two methods that each take two parameters and return data for the specified customer.
using System;
namespace ClassLibrary1
{
public class Class1
{
public string GetCustomerPaymentMode(string accountNum, string dataAreaId)
{
string paymentMode = String.Empty;
CustTable custTable = new CustTable();
// Search for the customer.
custTable = CustTable.findByCompany(dataAreaId, accountNum);
if (custTable.Found)
{
// Get the value for the customer's payment mode.
paymentMode = custTable.PaymMode;
}
return paymentMode;
}
public bool GetCustomerCreditLimit(string accountNum, string dataAreaId)
{
bool hasCreditLimit = false;
CustTable custTable = new CustTable();
// Search for the customer.
custTable = CustTable.findByCompany(dataAreaId, accountNum);
if (custTable.Found)
{
// Get the value for whether the customer has a credit limit.
hasCreditLimit = (custTable.MandatoryCreditLimit == NoYes.No ? false : true);
}
return hasCreditLimit;
}
}
}
Creating a Console Application Project
To create a console application project to test the assembly
In Solution Explorer, right-click the solution ClassLibrary1 and select Add > New Project.
Below the Installed Templates tree, click Visual C# > Windows, select the Console Application project type and then click OK.
In Solution Explorer, add a reference to the ClassLibrary1 project by right-clicking the References node under the ConsoleApplication1 project and then clicking Add Reference.
Click the Projects tab, select the ClassLibrary1 project and then click OK.
In Solution Explorer, add a reference to the managed interop assembly by right-clicking the References node under the ConsoleApplication1 project and then clicking Add Reference.
Click the Browse tab, locate the Microsoft.Dynamics.AX.ManagedInterop assembly and select OK. This assembly is located in the Client\Bin directory. For example, C:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin. This reference is necessary to use the Session object.
To call methods to display output to the console application
Open the Program.cs file and add the following code. This code calls the GetCustomerPaymentMode and the GetCustomerCreditLimit methods from the class you created and displays the values in the console window.
using System;
using ClassLibrary1;
using Microsoft.Dynamics.AX.ManagedInterop;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Create a session
using (Session session = new Session())
{
session.Logon(null, null, null, null);
Class1 class1 = new Class1();
string accountNum = "3003";
string dataAreaId = "ceu";
string paymentMode = String.Empty;
string hasCreditLimitText = String.Empty;
bool hasCreditLimit;
// Get the customer payment mode and credit limit.
paymentMode = class1.GetCustomerPaymentMode(accountNum, dataAreaId);
hasCreditLimit = class1.GetCustomerCreditLimit(accountNum, dataAreaId);
hasCreditLimitText = (hasCreditLimit == false ? " and does not have" : " and has");
// Write the data to the console
Console.WriteLine("Customer " + accountNum + " in company " + dataAreaId +
" has a payment mode of " + paymentMode + hasCreditLimitText +
" a mandatory credit limit." );
Console.ReadLine();
}
}
}
}In Solution Explorer, set the console application to be the startup project by right-clicking ConsoleApplication1 and then clicking Set as StartUp Project.
To test the generated assembly
Run the application. If you have the sample data installed, you will see the following output in the console window:
Customer 3003 in company ceu has a payment mode of CHCK and does not have a mandatory credit limit.
Tip: You may receive an error about the .NET target framework because both projects target the .NET Framework 4 by default but the Microsoft.Dynamics.AX.ManagedInterop assembly is a mixed-mode assembly that targets the 2.0 runtime. To resolve this error you have two options: you can change the target framework for both projects to .NET Framework 3.5 or you can add an attribute to the app.config file of the console application project. To change the target framework, right-click each project in Solution Explorer and then click Properties. In the Target framework field, select .NET Framework 3.5.
If you want the console application project to target the .NET Framework 4, add the useLegacyV2RuntimeActivationPolicy attribute to the startup element in the app.config file and set it to true. For example, <startup useLegacyV2RuntimeActivationPolicy="true">.
Integration with X++ Objects from Visual Studio [AX 2012]
Proxies
Proxies enable you to add an AOT element to your project in Visual Studio so that element can be accessed by managed code. When you add an AOT element to a project by using Application Explorer, a proxy for that element is created internally by the system.
The AOT elements that you can add to a managed code project are as follows:
- Classes
- Tables
- Enums
After you add the AOT element to your managed code project, all the methods and properties are available through IntelliSense. For more information, see post “Walkthrough: Adding an X++ Object to a Visual Studio Project”
A typical scenario for adding an X++ object to managed code is when you identify managed code functionality that you want to call from X++. This functionality may already be located in managed code or the development scenario may require that it run in managed code.
For example, you might want to have your Microsoft Dynamics AX installation updated with customer data from an external system. In this case, you create an X++ job that is scheduled to run periodically and calls a managed code class method. This method could then check for the external data and then call the appropriate CustTable methods to update the customer data (see the following diagram). Because the managed code that you write runs in the Microsoft Dynamics AX process, that code will typically be in a class library project.
The following diagram provides a high-level view of the integration of X++ and managed code. The initial call from X++ to managed code can originate from either an X++ .NET interop call or from an event handler.
Event Handlers
In the AOT, you can associate a class method with an event handler. An event handler is code that runs before the associated method runs or after the associated method has finished running. The event handler itself is also a class method, and it can be written in either X++ or managed code.
For example, you may have an X++ class method called MyClass.myMethod, and you have managed code that you want to run after the MyClass.myMethod method has finished running. In this case, you would create an event handler class and method in managed code, such as MyEventHandlerClass.PostmyMethod. This event handler contains the code that will execute after the MyClass.myMethod method is called.
When you add an event handler in Visual Studio, the system automatically creates a method that begins with either “Pre” (for event handlers that run before the method runs) or “Post” (for event handlers that run after the method completes). An event handler subscription is also automatically added to the MyClass.myMethod method. In addition, the properties of that subscription are set to point to the managed code class method. After the MyClass.myMethod method has finished running, then the MyEventHandlerClass.PostmyMethod event handler code executes. Event handlers can only be associated with a class in the AOTClasses node.
The following diagram illustrates how a managed code post-event handler is called. You can create the managed code class method and configure the event handler in the AOT to call that class method all from Visual Studio. For more information, see post “ Walkthrough: Creating an Event Handler in Visual Studio.”
Managed code post-event handler flow
Conclusion of Reporting in AX 2012
The SQL Server Reporting Services (SSRS) reporting architecture in Microsoft Dynamics AX 2012 is modified to follow a Model-View-Controller (MVC) design pattern variation. This architecture means many different client types can call Microsoft Dynamics AX 2012 SSRS reports including: Microsoft Dynamics AX clients, Enterprise Portal, and Batch Job.
Reports now use services instead of the .NET Business Connector to retrieve Microsoft Dynamics AX online transaction processing (OLTP) data.
Reporting Architecture
Microsoft Dynamics AX enforces security on all data returned. If the user who is running the report is not allowed to see a specific field, the data for that field is not returned.
Reporting Services offers several approaches for deploying server components.
• Scale-out deployment: A report server scale-out deployment is two or more report server instances that share a single report server database. A scale-out deployment enables you to increase the number of users who concurrently access reports and improve the availability of the report server.
• Failover cluster: SQL Server provides failover clustering support so that you can use multiple disks for one or more SQL Server instances.
Failover clustering is supported only for the report server database; you cannot run the Reporting Services Windows service as part of a failover cluster. .
Some reports use online analytical processing (OLAP) cubes to access data. The default OLAP cubes that are provided with Microsoft Dynamics AX require full license and configuration keys. When you turn off license or configuration keys, data is removed from corresponding columns in the online transaction processing (OLTP) database. As a result, cubes cannot access the data they were designed to retrieve. This means that you may see errors displayed in reports and Role Center web parts that use cubes as a data source. You will need to modify these reports and web parts so that they no longer try to retrieve data from a column or field that contains no data.
To install the reporting components in Microsoft Dynamics AX 2009, you had to install the reporting extensions when running the Setup wizard. For Microsoft Dynamics AX 2012, the Setup wizard is changed. It no longer includes an option for installing the reporting extensions. When you run the Setup wizard for Microsoft Dynamics AX 2012, you can install the business intelligence components.
Microsoft Dynamics AX includes many default reports that you must deploy to Microsoft SQL Server Reporting Services. If you did not deploy the reports when you installed the Business Intelligence components, you can use Windows PowerShell to deploy the reports.
Report deployment has moved to PowerShell from the Microsoft Dynamics AX 2009 Reporting Project Deployment form.
To deploy all reports, enter the following command: "Publish-AXReport –ReportName *", and then press Enter.
To deploy a specific report, enter The following command which used to deploy the CustTransList report: "Publish-AXReport –ReportName CustTransList", and then press Enter.
To Retrieve information about the default reports enter the following command: “Get-AXReport -ReportName *", and then press Enter.
Modify the list so that only the Name and ChangedDate fields are displayed by entering the following command: "Get-AXReportName * | Select- Object Name,ChangedDate" and then press Enter.
To filter list of all report which retrieved in previous command and get only specific reports are listed. For example, to filter the list so that only the reports that contain the word CustTrans are listed, enter the following command: "Get-AXReportName * | Select-Object Name,ChangedDate | Where { $_.Name –like "CustTrans*" }", and then press Enter.
Configure Report server
To grant users access to reports, you must configure security settings in Microsoft Dynamics AX and in Microsoft SQL Server Reporting Services. The following sections describe the tasks that you must complete in each application.
Configure security settings in Microsoft Dynamics AX
Complete the following tasks in Microsoft Dynamics AX:
• Determine which reports each Microsoft Dynamics AX role should have access to.
• Verify that each Microsoft Dynamics AX role has the correct duties and privileges assigned to it in order to access the reports.
• Assign users to Microsoft Dynamics AX roles.
• Secure the data shown in reports.
Configure security settings in Reporting Services
Complete the following tasks in Reporting Services:
• Assign users to the DynamicsAXBrowser role in Reporting Services.
• Identify the account that is used to run the Application Object Server (AOS) service and the account that is used as the Business Connector proxy. Assign those accounts to the DynamicsAXBrowser role in Reporting Services.
• Restrict access to report folders and reports. Reporting Services includes security features and tools that you should use to help control access to report folders and published reports.
