Dynamics AX Blog - Dynamics AX 2012 - Beiträge von 2010 - Seite 2

RSS-Feed dieser Version
Eine von RunBasebatch abgeleitete Klasse ist nicht im Stapel lauffähig
10.06.2010Microsoft Dynamics AX (Axapta)
Vor kurzem hatte ich die Aufgabenstellung, eine Klasse die bereits von RunBase abgeleitet worden war, stapelfähig zu gestalten. So weit so einfach, dachte ich mir und habe in der ClassDeclaration der Klasse extends runBase durch extends runBaseBatch ersetzt. Ich hatte danach zwar den entsprechenden Register im Dialog, die Klasse wurde aber dennoch immer sofort ausgeführt :-( Nach etwas herumprobieren hatte ich schlussendlich in der Methode getFromDialog den Fehler entdeckt: Diese war so programmiert, daß sie per return true immer true retouniert, das runBaseBatch-Framework benötigt an dieser Stelle allerdings ein return super(). Kleine Ursache, grosse Wirkung. |
Notizen zur RecId
04.03.2010Microsoft Dynamics AX (Axapta)
Die RecId ist die mehr oder weniger eindeutige Kennung eines Datensatzes in Dynamics AX. Mehr oder weniger deshalb, weil es auf die verwendete Version von Dynamics AX bzw. Axapta ankommt:
| ||||||||||
Unterschied zwischen update und doUpdate u.ä.Mir persönlich dreht sich ja immer der Magen um, wenn ich in einer Produktivumgebung einen Stückchen Code mit doUpdate() oder Konsorten entdecke, trotzdem verwende ich solcherart Methoden auch gerne für den einen oder anderen Aktualisierungsjob. Wer den Unterschied zwischen dem Aufruf von update() und doUpdate() nicht kennt, kann diesen in der MSDN nachlesen...oder aber auch in der nachstehenden Tabelle.
| ||||||||
|
|
|
|
|
|
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.