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

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: Show RecId of type LedgerDimension as Display valueIn the following code-example a record is selected from table LedgerJournalTrans, than the value of the field LedgerDimension respectively the field OffsetLedgerDimension is converted in the display value, which is display in a so called Segemented entry control.
static void GetLedgerDimensionDisplayValue(Args _args)
{
DimensionStorage dimensionStorage;
DimensionDisplayValue DimensionDisplayValue;
ledgerJournalTrans ledgerJournalTrans = LedgerJournalTrans::findRecId(5637169330, false);
// LedgerDimension
dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.LedgerDimension);
DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
info(DimensionDisplayValue);
// OffsetLedgerDimension
dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.OffsetLedgerDimension);
DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
info(DimensionDisplayValue);
}
Output for example: |
AX 2012: Determine whether a form is a list pageWith the following piece of code you can determine whether a form is a list page. static void isFormListPage(Args _args)
{ TreeNode treeNode; str formTemplateProperty; #Properties; treeNode = TreeNode::findNode(@"\\Forms\\CustTableListPage"); formTemplateProperty = global::findProperty(treeNode.AOTgetProperties(), #PropertyFormTemplate); if(formTemplateProperty == #PropertyValueListPage) { warning("Form is ListPage"); } } If anyone knows a better/more elegant solution, so I would be happy, if he or she contributes via the comment function. |
How to measure the execution time of a function?Using the function timeConsumed you can check the execution time of a function: static void stopWatch(Args _args)
{ FromTime fromTime = timeNow(); Counter c; // Simulating time consuming function for (c=1;c<=100;c++) { sleep(1000); } info(strFmt("Total time consumed: %1", timeConsumed(fromTime, timeNow()))); } Result in the Infolog: |
Add object nodes to a shared project through codeFind below a short example, how to add object nodes to a shared project through code. static void AddNodeToSharedProject(Args _args)
{ projectNode projectNode; TreeNode treeNode; #AOT #AOTExport projectNode = infolog.projectRootNode(); projectNode = projectNode.AOTfindChild(#expProjectShared); projectNode = projectNode.AOTfindChild('MyProject'); // Add objects treenode = TreeNode::findNode(#TablesPath+'\\'+tableid2name(tablenum(CustGroup))); projectNode.addNode(treenode); treenode = TreeNode::findNode(#TablesPath+'\\'+tableid2name(tablenum(VendGroup))); projectNode.addNode(treenode); treenode = TreeNode::findNode(#ClassesPath+'\\'+classStr(PriceDisc)); projectNode.addNode(treenode); } The so modified Project will look like this:
|
Loop through values of a Base enum
SysDictEnum SysDictEnum = new SysDictEnum(enumNum(SalesStatus));
int i;
for (i=0;i<SysDictEnum.values();i++)
{
info(SysDictEnum.index2Label(i));
} |
SQL-Error occurs when opening or synchronizing a tableIf the follwoing error occurs, when opening or synchronizing a - mostly new created - table
the reason could be, that the table contains a field, whose name is a "reserved word" from the database, For example, you cannot use Primary as field Name. |
|
|
|
|
|
|

A short code example how to can create records in a table very performant way using RecordInsertList. Who does not know RecordInsertList, can learn more about here.
static void HowToUseRecordInsertList(Args _args) { DMOPerfTest DMOPerfTest; RecordInsertList RecordInsertList; Counter c; FromTime fromTime = timeNow(); RecordInsertList = new RecordInsertList(tableNum(DMOPerfTest)); for (c=1;c<=10000;c++) { DMOPerfTest.clear(); DMOPerfTest.AccountNum = int2str(c); if(DMOPerfTest.validateWrite()) { RecordInsertList.add(DMOPerfTest); } } RecordInsertList.insertDatabase(); info(strFmt("Total time consumed: %1", timeConsumed(fromTime, timeNow()))); }