Dynamics AX Blog - Dynamics AX 2009 - Microsoft Dynamics AX (Axapta)
In den letzten Jahren, in denen ich mich fast hauptsächlich mit der Entwicklung im Umfeld von Microsoft Dynamics AX (vormals Axapta) beschäftigt habe, ist das eine oder andere Code-Fragment entstanden, von dem ich mir vorstellen könnte, daß es auch für andere AX-Entwickler ganz nützlich sein könnte. Aber auch Tips und Tricks zu dem mächtigen ERP-System werde ich in dieser Kategorie präsentieren.
RSS-Feed dieser KategorieRSS-Feed dieser Version
Sonderzeichen im XML-Header einer Methode verwendenManchmal muss man im XML-Header einer Methode Sonderzeichen verwenden, um den Code gut dokumentieren zu können. Damit dieser Header trotzdem wohlgeformt ist und nicht als Best-Practice-Abweichung gekennzeichnet wird, kann man einen CDATA-Abschnitt einsetzen. /// <version> /// 1.0 /// </version> /// <summary> /// <![CDATA[ Replaces following special characters: &, % ]]> /// </summary> private void someMethod() { //...do something... } Ohne diesen CDATA-Abschnitt würde AX folgende BP-Abweichung ausgeben:
|
Namen der Shared Projects nach einem String durchsuchenUm sich alle (Shared-)Projekte ausgeben zu lassen, die einen bestimmten Text im Namen tragen, kann man den folgenden Code verwenden. static void searchProjectName(Args _args) { ProjectNode projectNode; #AOTExport projectNode = infolog.projectRootNode(); projectNode = projectNode.AOTfindChild(#expProjectShared); projectNode = projectNode.AOTfirstChild(); while(projectNode) { setPrefix(projectNode.name()); if(strScan(projectNode.name(), "BR_", 0, 60)) { info(projectNode.name()); } projectNode = projectNode.AOTnextSibling(); } } |
Beim Öffnen einer Form den Filter aufmachenUm direkt beim Öffnen eines Formulares das Filter-Fenster zu öffnen, kann man beispielsweise diesen Code verwenden: public void run() { super(); if(dataSourceName_ds.queryRun().prompt()) { dataSourceName_ds.research(); } }
|
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" |
|
|
|
|
|
|
Wenn beim Anzeigen eines Berichtes am Bildschirm folgender Fehler auftritt, muss man im Windows einen Standarddrucker einrichten.