Dynamics AX Blog - Dynamics AX 2012 - Beiträge von 2015 - Seite 3

RSS-Feed dieser Version
Statt Parameter-Listen einen DataContract verwenden
14.07.2015Microsoft Dynamics AX (Axapta)
Wer schon einmal die Parameter einer Methode erweitern musste, kennt vielleicht das Problem: Wenn man Glück hat kann man seinen neuen Parameter am Ende einfügen und mit einem Default-Wert vorbelegen. classDeclaration MyDataContract
{ ItemId itemId; Qty qty; }
Public ItemId parmItemId(ItemId _itemId = itemId)
{ itemId = _itemId; return itemId; }
Public Qty parmQty(Qty _qty = qty)
{ qty = _qty; return qty; }
Public void myMethod(MyDataContract _dataContract)
{ // … do something… info(_dataContract.parmItemId()); }
MyDataContract dataContract;
dataContract = new MyDataContract(); dataContract.parmItemId("A1000"); dataContract.parmQty(123); Object.myMethod(dataContract);
|
CSV-Datei in Dynamics AX importieren/einlesenMIt Hilfe der CommaTextIo-Klasse kann man CSV-Dateien in Dynamics AX einlesen. Der hier gezeigte Job zeigt ein einfaches Beispiel für die Verwendung dieser Klasse. 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))); } } Prinzipiell ginge dies auch genauso mit der TextIo-Klasse (oder AsciiIo), allerdings muss man dabei beachten, daß diese Klassen beispielsweise unerwartete Ergebnisse liefern können, wenn der inFieldDelimiter - in meinem Beispiel ein Strichpunkt - innerhalb eines Textes vorkommt.
Folgende Beispieldatei würde anders verarbeitet, als vielleicht vom Entwickler erwartet. Die dritte Spalte in der dritten Zeile würde von der read()-Methode als zwei Spalten interpretiert werden. 100;450,00;Customername1 101;1200,00;Customername2 102;50,28;"Customername 3; Second customername" |
Label eines MenuItems ermittelnstatic void getLabelFromMenuItem(Args _args) { MenuItemBuild menuItemBuild = new menuItemBuild(menuitemDisplayStr(ProdTableDelayedListPage), MenuItemType::Display); info(menuItemBuild.menuFunction().label()); } |
AX 2012: Display-Methoden im Lookup II
20.06.2015Microsoft Dynamics AX (Axapta)
Mit Hilfe der Klasse SysTableLookup kann man sich den Lookup von Formularfeldern anpassen. Über die Methode addLookupMethod() können in diese Lookup-Formulare auch Display-Methoden eingebunden werden. Wichtig dabei ist lediglich, daß im Lookup alle Felder eingebunden werden (beispielsweise über addSelectionField()), die von der jeweiligen Display-Methode zur Ermittlung benötigt werden. Will man beispielsweise das Lookupformular der Artikelnummer um den Produktnamen erweitern, kann man dafür die folgende Methode nutzen. Hierbei ist beispielsweise das Feld Product der InventTable nur enthalten, um die Display-Methode itemName() im Lookup verwenden zu können. public client static void lookupItemId(FormStringControl _lookupCtrl) { sysTableLookup sysTableLookup; query query; QueryBuildDataSource qbds_inventTable; query = new query(); qbds_inventTable = query.addDataSource(tableNum(inventTable)); sysTableLookup = sysTableLookup::newParameters(tableNum(inventTable), _lookupCtrl); sysTableLookup.parmQuery(query); sysTableLookup.addLookupfield(fieldNum(inventTable, itemId)); sysTableLookup.addLookupMethod(tableMethodStr(inventTable, itemName)); sysTableLookup.addLookupfield(fieldNum(inventTable, NameAlias)); sysTableLookup.addLookupfield(fieldNum(inventTable, ItemType)); sysTableLookup.addSelectionField(fieldNum(inventTable, product)); sysTableLookup.performFormLookup(); } |
Bestellposition per Code erstellenEin einfach gehaltenes Beispiel wir man unter Verwendung der AX<Table>-Klasse der Tabelle PurchLine eine Bestellposition per Code erstellen kann. 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(); } |
|
|
|
|
|
|
Stellt euch folgende Aufgabenstellung vor: Es soll über eine vom SysOperation-Framework abgeleitete Klasse ein Datensatz erstellt oder aktualisiert werden. Danach soll sich ein bestimmtes Formular mit eben diesem Datensatz öffnen damit der Benutzer gleich mit evtl. weiteren manuellen Änderungen am Datensatz fortfahren kann.
Ich nutze für eine solche Aufgabenstellung gerne die afterOperation() der Kontroller-Klasse. In dieser kann ich den operationReturnValue meiner Service-Klasse auslesen und entsprechend verarbeiten.