Dynamics AX Blog - Page 11
Cancel 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: