Dynamics AX Blog - Microsoft Dynamics AX (Axapta) - Page 19

In recent years, i spent a lot of time in developing in the environment of Microsoft Dynamics AX (formerly Axapta). During this time i created a lot of code, from which I could imagine, that it might be very useful for other AX developers too. But I will present also tips and tricks round the powerful ERP system.
Subscribe to RSS feed of this categoryAX 2012: Synchronization errors are displayed, although these have already been solvedI recently had the problem that when i synchronize the database in the form database Synchronize database errors and/or warnings have been issued, in which i was sure that these have already been resolved. A simple solution to this behaviour is to delete the contents of the table SqlSyncInfo. The table can be found in the AOT under System Documentation > Tables > SqlSyncInfo. Incidentally, there is also the form SysSqlSync, which can be opened at any time and there you can view the result of the last synchronization. |
How to open a (simple) report in a specific languageUsing the report CustTransList (Accounts receiveable > Reports > Transactions > Customer > Transaction) i would like to demonstrate, how it is possible to call a report in a other language, the the client is currently running in. There are no classes available for this report, so i have to cretae my own one: class CustTransListController extends SrsReportRunController { }
public static str getReportName(Args _args) { str reportName = ssrsReportStr(CustTransList, Report); return reportName; }
public static void main(Args _args) { CustTransListController controller = new CustTransListController(); controller.parmReportName(CustTransListController::getReportName(_args)); controller.parmArgs(_args); controller.parmReportContract().parmRdlContract().parmLanguageId('en-us'); controller.startOperation(); } Using this class now it is possible, to run the report in every language (which should be provided using the parmLanguageId()-method. |
AX 2012: Show financial dimension using display methodFollowing display-method (created in the datasource of the form custtable) shows the financial dimension Costcenter. public display DimensionValue showCostCenter(CustTable _custTable) { DimensionAttributeValueSet dimensionAttributeValueSet; DimensionAttributeValueSetItem dimensionAttributeValueSetItem; DimensionAttributeValue dimensionAttributeValue; DimensionAttribute dimensionAttribute; #define.CostCenterDimensionName("CostCenter"); if( !_custTable || !_custTable.DefaultDimension) { return ''; } dimensionAttributeValueSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension); select firstOnly RecId from dimensionAttributeValueSetItem where dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId join DimensionAttributeValue where DimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue join RecId from dimensionAttribute where dimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute && dimensionAttribute.Name == #CostCenterDimensionName if(dimensionAttributeValue && dimensionAttribute) { return dimensionAttributeValue.getValue(); } return ''; } Simpler version (see comments) public display DimensionValue showCostCenter(CustTable _custTable) { #define.CostCenterDimensionName("CostCenter"); return ((select firstOnly DisplayValue from DefaultDimensionView where DefaultDimensionView.Name == #CostCenterDimensionName && DefaultDimensionView.DefaultDimension == _custTable.DefaultDimension).DisplayValue); } |
AX 2012: Enter financial dimension based on an form inputSometimes you have the requirement that a certain financial dimension is to be set on the basis of an input in a form. The following code example is something relatively easy to implement. In the example, whenever a particular field is changed - queried on the method modified() of the field of a DataSource, the financial dimension Costcenter will be filled with the value 25. If the value to be entered an invalid, nothing happens (error message or similar). public void modified() { DimensionAttribute DimensionAttribute = DimensionAttribute::findByName("Costcenter"); DimensionValue newValue = '25'; // New dimension value super(); dimensionDefaultingController.setDimensionAttributeValue( DimensionAttribute, DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, newValue).RecId, newValue); } In the example, an existing instance of DimensionDefaultingController used. |
Use macro within a SELECT statementThe SELECT-Statement in the example lists only active BOM items (Table BOM) on (active using the fields FromDate and ToDate). If the second parameter of the macro is empty (zero date ()), so all BOM items are listed. static void useMacroInSelectStatement(Args _args) { bom bom; date emptyDate; // parameters: %1 = table instance, %2 date, %3 empty date value #localmacro.bomDateFilter && ( %2 == dateNull() || ( ((%1.FromDate <= %2) && (%1.ToDate >= %2)) || ((%1.FromDate == %3) && (%1.ToDate == %3)) || ((%1.FromDate <= %2) && (%1.ToDate == %3)) || ((%1.FromDate == %3) && (%1.ToDate >= %2)) )) #endMacro ; while select bom where bom.ItemId == '123' #bomDateFilter(bom, systemDateGet(), emptyDate) { info(bom.bomid); } } |
Which fields are shown in an auto-generated lookup?I was asked this question recently and was not able to answer. But i still knew that i had seen a page where this is explained in detail. But i knew neither find it manually nor using various search engines. But in old documents of mine i found the source then, the trick to find it using search engines, is using the old name of Microsoft Dynamics AX - Axapta to look for it! Do this, you will quickly find following page: |
|
|
|
|
|
|
Find below some code-examples, how to Access external databases from Dynamics AX.
The examples are based on the following entry in MSDN:
How to: Connect to an External Database from X++ Code [AX 2012]
Read access (SELECT)