Dynamics AX Blog - Dynamics AX 2009 - Microsoft Dynamics AX (Axapta) - Seite 19

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 Kategorie
RSS-Feed dieser Version
Dynamics AX: Container Quicktipp
24.07.2008Microsoft Dynamics AX (Axapta)
Container sind ja was feines, und aus diesem Grund verwende ich sie immer wieder gerne beim Programmieren unter Dynamics AX. Durch einen Blog-Beitrag bei SysDictCoder bin ich auf einen kleinen Trick gestossen, der mir in Zukunft etwas Tipp-Arbeit ersparen wird. Und zwar habe ich bisher Container immer ähnlich wie im folgenden befüllt: container fieldCon = conNull();
; fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "accountNum"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "name"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "zipcode"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "countryregionid"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "county"); Wesentlich rascher ist die folgende Schreibweise: container fieldConFast = conNull();
; fieldConFast += "accountNum"; fieldConFast += "name"; fieldConFast += "zipcode"; fieldConFast += "countryregionid"; fieldConFast += "county"; SysDictCoder geht in seinem Artikel etwas mehr ins Detail, deshalb meine Empfehlung dort mal vorbeizuschauen. |
AX 2009 What's New Technical training - Technical
19.07.2008Microsoft Dynamics AX (Axapta)
Diese Woche genoß ich einen eintägigen Ausflug in die neue Welt von Dynamics AX 2009 und lernte einige Aspekte der neuen Version aus technischer Sicht kennen. Anbei eine kurze Liste der für mich herausragensten Neuerungen:
Diese Liste ist weder vollständig noch wirklich validiert, hoffe in den nächsten Wochen etwas mehr Zeit mit der neuen Version verbringen zu dürfen :-) |
Dynamics AX: SalesTable2LineField
22.06.2008Microsoft Dynamics AX (Axapta)
In der Auftragserfassung gibt es im Auftragskopf Felder, die, wenn sie aktualisiert werden, entweder vollautomatisch bzw. nach Rückfrage beim Benutzer in den Auftragszeilen ebenfalls aktualisiert werden. Welche Felder das sind kann in den Debitorenparametern, Register Aktualisierungen über die Schaltfläche Auftragspositionen aktualisieren eingesehen werden. Dort kann auch parametriert werden, wie sich Dynamics AX bei der Aktualisierung dieser Felder verhalten soll. Um nun ein weiteres Feld in diese Logik mitaufzunehmen bedarf es einiger Schritte. Im folgenden demonstriere ich die notwendigen Änderungen anhand des neuen Feldes DevReceiptDateRequested (abgeleitet vom EDT DevSalesReceiptDateRequested):
Übrigens, die gleiche Logik gibt es natürlich auch einkaufsseitig. Die obige Abfolge und die Codebeispiele wurden unter AX3 entwickelt. Update vom 28.07.2010: In Dynamics AX 2009 funktioniert die beschriebene Lösung genauso. Lediglich beim auszuführenden Job hat sich der Datentyp des Feldes table2LineUpdate geändert. |
Dynamics AX: Methode des "Callers" aufrufen
17.06.2008Microsoft Dynamics AX (Axapta)
Immer wieder besteht die Notwendigkeit, ein Formular über ein anderes zu öffnen und aus diesem heraus Methoden des Aufrufers aufzurufen. Einfaches Beispiel: Ich öffne aus der Auftragsmaske (Salestable) irgendein anderes Formular (über einen MenuItemButton) und möchte nun beim Schliessen dieses Formulares eine Methode in der Salestable-Maske aufrufen. Achtung: IntelliSense funtioniert in diesem Fall nicht (außer ich möchte eine Methode aufrufen, die im FormRun-Objekt enthalten ist). if (element.args() && element.args().caller()) { if (element.args().caller().name() == formStr(Salestable)) { element.args().caller().myMethod(); } } |
Dynamics AX: Excel-Datei erstellen aus einer CSV-Datei
04.06.2008Microsoft Dynamics AX (Axapta)
Manchmal ist es notwenig, aus Dynamics AX heraus per X++ eine "echte" Excel-Datei zu erstellen. Dazu stellt AX ja bekanntermaßen Objekte wie SysExcelApplication, SysExcelWorkBooks usw. zur Verfügung. Der Nachteil dieser Objekte ist rasch erwähnt: Sie sind langsam! Aber es geht auch wesentlich rascher, allerdings mit dem Umweg per TextIO zuerst eine CSV-Datei zu erstellen und diese anschließend von AX in eine Excel-Datei umzuwandeln. Der Code für letztere Umwandlung ist diesem Microsoft-Knowlegebase-Artikel zu entnehmen (erfordert PartnerSource-Zugriff). |
Dynamics AX: Notizen zu Labelfiles
22.04.2008Microsoft Dynamics AX (Axapta)
Es gibt vier verschiedene Dateien, in welchen serverseitig Informationen zu Labels gespeichert werden:
Bei den Datetypen, ald, alc und ali existiert pro Sprache und Labelfile jeweils eine Datei im AX-Applikationsverzeichnis (z.b. axSYSde-at wobei SYS für die Labeldatei und de-at für die jeweilige Sprache steht). Bei den alt-Dateien existiert lediglich pro Sprache eine eigene Datei (z.b. axap*.alt wobei * für die jeweilige Sprache steht). Einige Labels werden allerdings clientseitig im bin-Verzeichnis gespeichert. Dies sind z.b. jene des Menüs (Datei - Bearbeiten - Werkzeuge ...). Hier gibt es eigene Dateitypen:
Bei beiden Dateitypen existiert pro verwendeter Sprache jeweils eine Datei. Da die Dateien clientseitig installiert sind, kann rein theoretisch jeder Client zumindest diese Texte anpassen, ob das Sinn macht bleibt dahingestellt. Außerdem besteht die Gefahr die Datei, durch Tippfehler oder wenn man die ktd-Datei im falschen Zeichensatz bearbeitet, zu zerstören. Dann ist der Client nicht mehr startbar! In dieser ktd-datei werden übrigens auch einige andere Dinge gesteuert. Zum Beispiel liefert in einem deutschen AX die Abfrage if("a" == "ä") immmer true zurück. Grund hierfür ist die nachstehende Passage im zur deutschen Sprache gehörigen axsysde-at.ktd >#97 >TC_COLSEQ >Definition of collating sequence mapping >This table is used when sorting letters and strings >First line is the letters to be mapped >Second line is the corresponding letter to map to AàáâãäÀÁÂÃÄBCçÇDEèéêëÈÉÊËFGHIìíîïÌÍÎÏJKLMNñÑOòóôõöÒÓÔÕÖPQRSTUùúûüÙÚÛÜVWXYýÝZæøåÆØÅ aaaaaaaaaaabcccdeeeeeeeeefghiiiiiiiiijklmnnnooooooooooopqrstuuuuuuuuuvwxyyyz~¦Ç~¦Ç
| ||||||||||||||||||||||||||
|
|
|
|
|
|
Manchmal ist es notwendig, in AX externe Programme (zb. per WinApi::shellExecute) aufzurufen und deren Rückmeldung abzuwarten. Mir ist z.B. in letzter Zeit immer wieder der Fall untergekommen, daß ich über ein externes Programm eine Datei erstellen musste, und diese anschließend in AX einlesen bzw. weitervearbeiten musste.
Für diesen Fall habe ich eine ganz simple Logik gebastelt, die eine bestimmte Anzahl Sekunden lang prüft, ob es die benötigte Datei schon gibt und erst dann mit den weiteren Schritten fortfährt.