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

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 categoryCancel salesline through codeThe code is based on the logic in the form SalesUpdateRemain ("Deliver remainder" button in the sales order header). static void cancelSalesLine(Args _args) { boolean updated; SalesLine salesLine; try { ttsBegin; salesLine = SalesLine::findInventTransId('012411', true); updated = SalesUpdateRemain::updateDeliveryRemainder(salesLine, 0, 0); if(updated) { info("Salesline canceled"); } ttsCommit; } catch { error("SalesLine could not be canceled"); } } |
List all modified objects from current layer, which are not added to versioncontrolUsing the SysModel* tables, you can browse the AOT to certain objects or their properties in Dynamics AX. I've posted an example already here. |
SysOperation: Open form with specific record after processingImagine the following scenario: You have to create or update a record using a clas, which extends Sysoperation-Framework. After this database operation you have to open a particular form, which allows the user to modify the just created/modified record. For such tasks i like to use the aferoperation()-method from the Controller-Class. By using the operationReturnvalue of the Service-Class within this method it is possible to process the record. |
Import data from csv-file to Dynamics AXUsing the CommaTextIo class you can import CSV files into Dynamics AX. The job shows a simple example of using this class. static void importCSVFile(Args _args) { Filename fileName = @"c: empcsvimport.csv"; CommaTextIo commaTextIo = new CommaTextIo(fileName, "r"); container lineCon; commaTextIo.inFieldDelimiter(';'); commaTextIo.inRecordDelimiter(' '); while (commaTextIo.status() == IO_Status::OK) { lineCon = commaTextIo.read(); info(strFmt("%1 %2 %3", conPeek(lineCon, 1), conPeek(lineCon, 2), conPeek(lineCon, 3))); } } In principle, this would also work with the TextIo class (or AsciiIo), but it must be noted that these classes can provide unexpected results when, for eample the inFieldDelimiter - in my example a semicolon - occurs within a text.
The following sample file would otherwise be processed, as expected from the developer. The third column in the third row would be interpreted as two columns by the read()-method. 100;450,00;Customername1 101;1200,00;Customername2 102;50,28;"Customername 3; Second customername" |
Get label from MenuItemstatic void getLabelFromMenuItem(Args _args) { MenuItemBuild menuItemBuild = new menuItemBuild(menuitemDisplayStr(ProdTableDelayedListPage), MenuItemType::Display); info(menuItemBuild.menuFunction().label()); } |
Create purchase order line through codeA simple example of how to create a purchase order line through code using AX<Table>-Class. static void createPurchLine(Args _args) { axPurchLine axPurchLine; purchLine purchLine; axPurchLine = AxPurchLine::newPurchLine(purchLine); axPurchLine.validateInput(true); axPurchLine.continueOnError(false); axpurchLine.parmPurchId("P00001"); axpurchLine.parmItemId("1000"); axPurchLine.parmPurchQty(10); axPurchLine.parmPurchPrice(24.50); axPurchLine.save(); } |
|
|
|
|
|
|
To open the query-windows when opening a form, you can use the following code for example: