Dynamics AX Blog - Dynamics AX 2012 - Beiträge vom Juli 2010

RSS-Feed dieser Version
Liste aller Felder einer Tabelle ausgeben
24.07.2010Microsoft Dynamics AX (Axapta)
Unlängst benötigte ich eine Liste aller Felder einer Tabelle mit deren Datentypen. Dafür habe ich mir den folgenden Job - im Beispiel für die Tabelle custGroup - geschrieben: static void listAllFields4Table(Args _args) { dictTable dictTable = new dictTable(tableNum(custGroup)); int currFieldId = 0; counter c = 0; dictField dictField; counter a = 0; common common; str enumName; ; common = DictTable.makeRecord(); setPrefix(strFmt("Fields of table %1", tableId2name(common.TableId))); currFieldId = 0; c = 0; do { currFieldId = dictTable.fieldNext(currFieldId); if(currFieldId != 0) { dictField = new dictField(common.TableId, currFieldId); if(dictField.arraySize() == 1) { info( strFmt("%1: %2 [%3%4]", dictTable.fieldName(currFieldId), dictField.label(), dictField.baseType(), dictField.enumId() ? strFmt(" %1", enumId2Name(dictField.enumId())) : "") ); } else if(dictField.arraySize() > 1) { for(a=1;a<=dictField.arraySize();a++) { info( strFmt("%1 [%2]: %3 [%4]", dictTable.fieldName(currFieldId), a, dictField.label(), dictField.baseType()) ); } } } c++; } while (c < dictTable.fieldCnt()); } |
Prüfungen durchführen beim/vor dem Schliessen eines Formulares
20.07.2010Microsoft Dynamics AX (Axapta)
Möchte/muß man beim bzw. vor dem Schliessen eines Formulares etwas tun, z.B. Prüfungen durchführen, so stellt Dynamics AX dafür einige Methoden zur Verfügung, die in einer bestimmten Reihenfolge abgearbeitet werden. Da ich selbst mir diese Reihenfolge nicht merke, habe ich sie hier kurz notiert. Beim Schliessen eines Formulares über einen OK-Commandbutton:
Beim Schliessen eines Formulares über einen CANCEL-Commandbutton:
Beim Schliessen eines Formulares über "das rote X" bzw. der ESC-Taste:
|
Feldwert eines aufrufenden Objektes ermitteln
19.07.2010Microsoft Dynamics AX (Axapta)
In vielen Objekten sieht man Kontrukte wie das folgende, die dazu dienen, einen Wert aus dem aufrufenden Datensatz zu ermitteln. if (element.args() && element.args().record()) { switch (element.args().dataset()) { case tablenum(PurchLine) : itemIdCaller = element.args().record().(fieldNum(purchLine, ItemId)); break; case tablenum(SalesLine) : itemIdCaller = element.args().record().(fieldNum(SalesLine, ItemId)); break; case tablenum(SalesQuotationLine) : itemIdCaller = element.args().record().(fieldNum(SalesQuotationLine, ItemId)); break; } } Einfacher geht’s mit unten dem stehenden Stückchen Code! Der grosse Vorteil von diesem ist, daß wann immer man das Objekt von einem Datensatz aus aufruft, der ein Feld namens itemId enthält, die Logik abgearbeitet wird ohne daß man jede Tabelle einzeln im switch-Statement berücksichtigen muss. |
|
|
|
|
|
|
Folgend etwas X++ Code, mit dessen Hilfe man eine Palette verlagern kann, also genau das, was die Schaltfläche "Palette verlagern" in Formular Palette tut.
wmsPalletMove.parmWMSPalletId('00000022_117');
wmsPalletMove.parmToInventLocationId('300');
wmsPalletMove.parmToLocationId('01');
if(wmsPalletMove.validate())
{
wmsPalletMove.run();
}