Dynamics AX Blog - Beiträge von 2014
Arbeitsplanliste eines Produktionsauftrags prüfen/buchenDer nachstehende Job prüft (bzw. bucht) eine Arbeitsplanliste eines Produktionsauftrages. Über den Enum JournalCheckPostType kann festgelegt werden, ob geprüft oder gebucht werden soll. static void checkPostProdJournalTableRoute(Args _args) { JournalCheckPost journalCheckPost; ProdJournalTable prodJournalTable = ProdJournalTable::find("00943", true); // Check/Post journal journalCheckPost = ProdJournalCheckPostRoute::newJournalCheckPost(false, true, JournalCheckPostType::Check, prodJournalTable.TableId, prodJournalTable.JournalId); journalCheckPost.run(); } |
Einzelvorgangsliste eines Produktionsauftrags prüfen/buchenDer nachstehende Job prüft (bzw. bucht) eine Einzelvorgangsliste eines Produktionsauftrages. Über den Enum JournalCheckPostType kann festgelegt werden, ob geprüft oder gebucht werden soll. static void checkPostProdJournalTableRouteJob(Args _args) { JournalCheckPost journalCheckPost; ProdJournalTable prodJournalTable = ProdJournalTable::find("00943", true); // Check/Post journal journalCheckPost = ProdJournalCheckPostRouteJob ::newJournalCheckPost(false, true, JournalCheckPostType::Check, prodJournalTable.TableId, prodJournalTable.JournalId); journalCheckPost.run(); } |
Fertigmeldung eines Produktionsauftrags prüfen/buchenDer nachstehende Job prüft (bzw. bucht) eine Fertigmeldung eines Produktionsauftrages. Über den Enum JournalCheckPostType kann festgelegt werden, ob geprüft oder gebucht werden soll. static void checkPostProdJournalTablePostProd(Args _args) { JournalCheckPost journalCheckPost; ProdJournalTable prodJournalTable = ProdJournalTable::find("00943", true); // Check/Post journal journalCheckPost = ProdJournalCheckPostProd::newJournalCheckPost(false, true, JournalCheckPostType::Check, prodJournalTable.TableId, prodJournalTable.JournalId); journalCheckPost.run(); } |
Label eines Dialogfeldes ermitteln/auslesen
23.12.2014Microsoft Dynamics AX (Axapta)
Vor kurzem wollte ich in der validate()-Methode einer von RunBase abgeleiteten Klasse ein Fehlermeldung einbauen, die als Teil das Label eines Dialogfeldes verwendet. Dabei musste ich feststellen, daß dies gar nicht so einfach ist, wie ich es mir vorgestellt hätte. Die verfügbare Methode dialogField.fieldControl().Label() funktioniert offenbar nur dann, wenn man dem Dialogfeldes explizit ein eigenes Label zugewiesen hat (und dieses nicht dynamisch über den EDT gezogen wird). Deshalb im folgenden ein kurzer Job, der zeigt wie man das Label eines Dialogfeldes auslesen kann. Die gleiche Logik lässt sich natürlich u.a. auch in einer Klasse, die von RunBase/RunBaseBatch abgeleitet wurde, verwenden. static void getDialogFieldLabel(Args _args) { Dialog dialog = new Dialog(); DialogField df_Project; DialogField df_AmountMST; str getLabel(DialogField _df) { formStringControl fsc; fsc = _df.fieldControl(); return fsc.labelText(); } df_project = dialog.addField(typeId(ProjId), "Mein Projekt"); df_AmountMST = dialog.addField(typeId(AmountMST)); dialog.run(); info(getLabel(df_project)); info(getLabel(df_AmountMST)); } |
Erstellen einer Lieferadresse per Code
21.12.2014Microsoft Dynamics AX (Axapta)
Die nachstehenden Zeilen Code zeigen ein Beispiel, wie man per X++ eine (nicht primäre) Adresse für eine vorhandene Partei im Globalen Adressbuch erstellen kann. Dabei wird gleichzeitig über den Base Enum LogisticsLocationRoleType der Typ der Adresse als Lieferadresse angegeben, natürlich ist es auch möglich, der Adresse einen anderen Typ zuzuweisen. static void createPartyDeliveryAddressNonPrimary(Args _args) { DirPartyTable dirPartyTable = DirPartyTable::findByNum("?100000??"); DirParty dirParty; DirPartyPostalAddressView dirPartyPostalAddressView; // Create instance of dirParty dirParty = DirParty::constructFromCommon(dirPartyTable, DirUtility::getCurrentDateTime(), DirPartyType::Organization); // Create primary address dirPartyPostalAddressView.LocationName = "Delivery"; dirPartyPostalAddressView.City = "Vienna"; dirPartyPostalAddressView.Street = "Kärtnerring"; dirPartyPostalAddressView.StreetNumber = "21"; dirPartyPostalAddressView.CountryRegionId = "AUT"; dirPartyPostalAddressView.IsPrimary = NoYes::No; dirParty.createOrUpdatePostalAddress(dirPartyPostalAddressView, [LogisticsLocationRole::findBytype(LogisticsLocationRoleType::Delivery).RecId]); } |
Eine bestimmte Dimension als Dialogfeld einbindenWenn man in Dynamics AX 2009 (oder früheren Versionen) eine bestimmte Dimension als Dialogfeld verwenden möchte, kann man sich einen eigenen Extended Datatype (abgeleitet von Criterias) wie im folgenden beschrieben anlegen. Entscheidend sind dabei die Relations dieses EDTs. Der Beispiel-Code ist einer von RunBase abgeleitenden Klasse entnommen. protected Object dialog(DialogRunbase dialog, boolean forceOnClient) { Object ret; ret = super(dialog, forceOnClient); df_project = ret.addField(TypeId(DimensionCostCenter)); return ret; } Der so angepasste Dialog sollte wie folgt aussehen: |
|
|
|
|
|
|
Der nachstehende Job prüft (bzw. bucht) eine Kommissionierliste eines Produktionsauftrages. Über den Enum JournalCheckPostType kann festgelegt werden, ob geprüft oder gebucht werden soll.