This is how we can loop through all the fields of a table in X++: static void Job1(Args _args) { SysDictTable dictTable = new SysDictTable(tableNum(PurchLine)); SysDictField dictField; TreeNode treeNode; FieldId fieldId = dictTable.fieldNext(0); while (fieldId) { dictField = dictTable.fieldObject(fieldId); if (dictField.isSql() && !dictField.isSystem()) { treeNode = dictField.treeNode(); info(strFmt("%1 | %2 | %3", dictField.name(), // Field... Continue Reading →
AX 2012: evalBuf – Evaluate string expression in X++
evalBuf Function is a very strong API in X++. We can quite easily evaluate complex algebraic expressions given in string and the result is also given back in string. This API should be used along with CodeAccessPermission. The downside of using this API is that the code using this function is not supported in CIL.... Continue Reading →
AX 2012: Add dynalink in X++
Use the following code to add dynalink to the form datasource query: public void init() { super(); this.query().dataSourceTable(tableNum(MzkPurchTrackingDetailsTable)).clearDynalinks(); this.query().dataSourceTable(tableNum(MzkPurchTrackingDetailsTable)).addDynalink( fieldNum(MzkPurchTrackingDetailsTable, PurchId), PurchParmTable, fieldNum(PurchParmTable, PurchId)); } Where, First parameter is the source table field Second parameter is the destination table Third parameter is the destination table field
AX 2012: Refresh caller form datasource
The following code refreshes the caller form datasource from the calling form: void clicked() { Args arg = new Args(); FormRun formRun; ; arg = new args(formstr(YourForm)); arg.record(yourTable); arg.caller(this); formRun = classFactory.formRunClass(arg); formRun.init(); formRun.run(); formRun.wait(); formRun.detach(); YourTable_DS.reread(); YourTable_DS.rereadReferenceDataSources(); YourTable_DS.research(true); } 1. reread() - Rereads the current record from the database 2. rereadReferenceDataSources() - Rereads the reference... Continue Reading →
AX 2012: Add financial dimension for your table
Lets quickly take a look at how the financial dimensions framework has been redesigned in AX 2012. The following picture show the table design: To add a new financial dimension for your custom table, perform the following steps: 1. Drag the EDT (AOT >> Data Dictionary >> Extended Data Types >> DimensionDefault) to the fields... Continue Reading →
AX 2012: How to open a form in X++
Using FormRun: void clicked() { Args args; FormRun formRun; args = new Args(formstr(CustTable)); args.record(custTableLocal); formRun = classFactory.formRunClass(args); formRun.init(); formRun.run(); formRun.wait(); formRun.detach(); CustTable_DS.research(); } Using MenuFunction: void clicked() { Args args; args = new Args(); args.caller(this); args.parmObject(list); new MenuFunction(menuItemDisplayStr(SalesTable), MenuItemType::Display).run(args); }
AX 2012: this vs element | When to Use What?
In X++ we often come across an issue that we are unable to access an object member (e.g. a form method) via this keyword. Instead we CAN access the same form method via element keyword. So what's the difference between them? The difference is of the scope. To understand how it works, let's assume that... Continue Reading →
AX 2012: Create lookup in X++
To create a lookup on a control (e.g. StringEdit control), override the lookup method of that control and copy paste the following code snippet in it. Of course, you will need to substitute datasource of the query according to your requirements. public void lookup() { Query query; QueryBuildDataSource datasourceModule; QueryBuildDataSource datasourceLanguage; QueryBuildRange rangeElementType; QueryBuildRange rangeModuleId;... Continue Reading →
AX 2012: Windows Save File Dialog in X++
If you want to open the standard Windows Save File Dialog from X++ and let the user select the path of the file to save to, then you can use the following code: This code opens the following dialog: