Dynamics AX Blog - Dynamics AX 2009 - Beiträge von 2015

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" |
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(); } |
Erstellen einer AX<Table>-Klasse IIBenötigt man für eine Tabelle eine sog. AX<Table>-Klasse kann man sich diese mit Hilfe der Klasse AxGenerateAxBCClass generieren lassen. Dazu einfach diese Klasse im AOT per rechter Maustaste aufrufen und dem Assistenten folgen oder folgenden Job anpassen und ausführen: static void generateAXTableClass(Args _args) { AxGenerateAxBCClass axGenerateAxBCClass; axGenerateAxBCClass = new AxGenerateAxBCClass(); axGenerateAxBCClass.parmTableId(tableNum(MyNewTable)); axGenerateAxBCClass.run(); } Die auf diese Art & Weise generierte Klasse muss unter manchen Umständen noch etwas bearbeitet werden, dennoch geht der Vorgang rascher von der Hand, als die Klasse komplett selbst erstellen zu müssen. Und wenn sich die Tabelle ändert, beispielweise wenn neue Felder hinzukommen, kann man die AxGenerateAxBCClass einfach nochmals aufrufen und die AX<Table>-Klasse wird entsprechend erweitert. Wie man solche AX-Klassen verwendet, habe ich u.a. hier beschrieben. |
|
|
|
|
|
|
Um direkt beim Öffnen eines Formulares das Filter-Fenster zu öffnen, kann man beispielsweise diesen Code verwenden: