Tuesday, June 27, 2017

Run code based on configuration key in dynamics AX 2012

Sometimes you need to run code based on your configuration keys 

Code:


  if  (isConfigurationKeyEnabled (configurationkeynum(keyname)))
   {
                     // Code goes here..
   }
   else
   {
                // do something else
    }



Happing daxing

Facing error while deploying from Visual studio

You get the error when trying to deploy a report either by using VS2013 reporting tool or through AOT


The "GenerateRdlTask" task failed unexpectedly.
System.IO.FileLoadException: Loading this assembly would produce a different grant set from other instances. (Exception from HRESULT: 0x80131401)

Resolution:
1. Go to Control Panel\System and Security\System
2. Open Advanced system settings and open Environment Variables
3. Create a New Variable
4.Variable name: COMPLUS_LoaderOptimization ; Variable value: 1
5. Click OK
6. Logout from the server and logon again.
7. Open the report using Visual Studio 2013 and deploy the AX report.
8. The report can also be deployed from AOT

Deploy SSRS Report through Power Shell

Here is the command to deploy SSRS Report Through Power Shell

Deploy Single Report

 To deploy a specific report, enter the name of the report. For example, to deploy the CustTransList report, enter  the following command:
Command : Publish-AXReport -ReportName CustTransList

Deploy Multiple Report

To deploy two or more specific reports, enter the names of the reports. For example, to deploy the CustTransList and CustTransOpenPerDate reports, enter the following command:
Command : Publish-AXReport -ReportName CustTransList, CustTransOpenPerDate

Deploy All Report

To deploy all reports, enter the following command:
Command  : Publish-AXReport –ReportName 

Create financial dimension through x++

Here is the code to create/find financial dimension in x++

static RecId findCreateDimension(str _project, str _department)
{
    RecId                               ret;

    DimensionAttributeValueSetStorage   dimStorage;
    DimensionAttributeValue             dimensionAttributeValue;
    DimensionAttribute                  dimensionAttribute;
    ;
    if (_project || _department)
    {
        dimStorage              = new DimensionAttributeValueSetStorage();
        if (_project)
        {
            dimensionAttribute      = AxdDimensionUtil::validateFinancialDimension("project");
            dimensionAttributeValue = AxdDimensionUtil::validateFinancialDimensionValue(dimensionAttribute, _project);
            dimStorage.addItem(dimensionAttributeValue);
        }
        if (_department)
        {
            dimensionAttribute      = AxdDimensionUtil::validateFinancialDimension("Department");
            dimensionAttributeValue =    AxdDimensionUtil::validateFinancialDimensionValue(dimensionAttribute,    _department);
            dimStorage.addItem(dimensionAttributeValue);
        }
        ret = dimStorage.save();
    }
    return ret;
}

Deploy Report through x++ code

Here is the code to deploy SSRS report in Microsoft Dynamics AX.

static void deployReport(Args _args)
{
    SRSReportManager srsRptMgr = new SRSReportManager();
    SSRSReportConceptNode node = new SSRSReportConceptNode();

    node = TreeNode::findNode(@"\\SSRS Reports\Reports\SalesInvoice");

    srsRptMgr.deploymentStart();
    srsRptMgr.deployReport(node);
    srsRptMgr.deploymentEnd();
}

Refresh,Reread,Research,ExecuteQuery in dynamics AX

Refresh,Reread,Research,ExecuteQuery in dynamics AX
1. Refresh()
refreshes the user view with whats stored in the caches. This does not touch the DB.
Use this after any form change has been made through code.
2. ReRead()
 fetches only the current record from database and does not re read the complete datasource.
Use this when you need to update only the current record after modifying any value.
3 . ReSearch() 
  will execute the same query again and fetch the results from the database.
Use this if you need to get the current most data from database.
4 . ExecuteQuery()
 will run the query again just like research does but it will also take any query changes into account.
Use this is you have modified the query on run-time and need the updated results according to the new query.

Difference among Research() and Research(true) in AX 2012

Difference among Research() and Research(true) in AX 2012

Research
Calling research() will return the existing form query against the database, therefore updating the list with new/removed records as well as updating all existing rows. This will honor any existing filters and sorting on the form, that were set by the user.
Research(true)
The research method starting with AX 2009 accepts an optional boolean argument_retainPosition. If you call research(true), the cursor position in the grid will be preserved after the data has been refreshed. This is an extremely useful addition, which solves most of the problems with cursor positioning (findRecord method is the alternative, but this method is very slow).