Dynamics AX Blog - Seite 13
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. |
Kontaktinformation zu einer Entität hinzufügenAnbei ein Beispiel, wie man per Code zu einem bestehenden Eintrag im Globalen Adressbuch Kontaktinformationen hinzufügen kann. static void createPartyContactInfo(Args _args) { DirPartyTable dirPartyTable = DirPartyTable::findByNum(??"100000"); DirParty dirParty; DirPartyContactInfoView dirPartyContactInfoView; // Edit Global address book dirParty = DirParty::constructFromCommon(dirPartyTable, DirUtility::getCurrentDateTime(), DirPartyType::Organization); // Create contact info dirPartyContactInfoView.LocationName ='Office'; dirPartyContactInfoView.Locator ='+43 1 4654646'; dirPartyContactInfoView.Type = LogisticsElectronicAddressMethodType::Phone; dirPartyContactInfoView.IsPrimary = NoYes::Yes; dirParty.createOrUpdateContactInfo(dirPartyContactInfoView); } Im AX stellt sich ein solcher Eintrag wie folgt dar: |
AX 2012: Beispiel für den Einsatz einer Computed Column II
09.05.2015Microsoft Dynamics AX (Axapta)
Der folgende Code zeigt, wie man mit Hilfe einer Computed Column eine einfache Multiplikation auf Datenbank-Ebene ausführen kann. private static server str compColLineAmountMST() { #define.ViewName("PurchLineExpanded") #define.DataSourceName("PurchLine") return SysComputedColumn::multiply(SysComputedColumn::returnField(#ViewName, #DataSourceName, fieldStr(PurchLine, PurchPrice)), SysComputedColumn::returnField(#ViewName, #DataSourceName, fieldStr(PurchLine, PurchQty))); } Das Ergebnis sieht wie folgt aus (Spalte PurchLineAmount): Kleiner Tipp: Es gibt noch zahlreiche Methoden wie die oben verwendete multiply(), mehr dazu auf der MSDN. |
Geänderte Objekte innerhalb eines Layers ausgebenUm den AOT nach bestimmten Objekten zu durchsuchen, kann man in AX die TreeNode-Klasse verwende. Einige Beispiele dazu habe ich hier ja auch schon in der Vergangenheit gepostet. |
|
|
|
|
|
|
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.