Dynamics AX Blog - Dynamics AX 2012 - Seite 4

RSS-Feed dieser Version
SysOperation-Framework: Stapelverarbeitung standardmässig aktivierenWer bei einer über das SysOperation-Framework umgesetzten Funktion standardmässig die Stapelverarbeitung aktivieren möchte, kann dies wie in folgendem Beispiel über einen Eingriff in den UI-Builder umsetzen. public void build() { super(); this.controller().batchInfo().parmBatchExecute(NoYes::Yes); } Durch den Code wird das Kennzeichen Stapelverarbeitung im Register Stapel aktiviert. |
Auslesen des Inhalts einer AXMODEL-Datei
Solche Informationen kann man sich mit der Microsoft Dynamics AX 2012 Management Shell auslesen: Get-AXModel -File 'c:\temp\dynamicsax2012r3_cl4555332.axmodel' -Details Das sieht wie folgt aus: Manifest Summary Elements -------- ------- -------- Microsoft.Dynamics.AX.F... {\Classes: 3} {\Classes\WHSLoadLineI... |
Kostenstelle per Code anlegenWer mal in die Verlegenheit kommt, eine Kostenstelle per Code anlegen zu müssen, dem kann vielleicht dieser Job als Inspiration dienen: static void createCostCenter(Args _args) { str 30 _costCenter = "0815"; // Cost center id to create OMOperatingUnit omOperatingUnit; NumberSeqFormHandler numberSeqFormHandler; NumberSeq numberSeq; if (_costCenter) { if (!OMOperatingUnit::findName( _costCenter, OMOperatingUnitType::OMCostCenter)) { ttsbegin; numberSeq = NumberSeq::newGetNumFromId( OMOperatingUnit::getNumberSequenceReference().NumberSequenceId); omOperatingUnit.clear(); omOperatingUnit.initValue(); omOperatingUnit.omOperatingUnitNumber = numberSeq.num(); omOperatingUnit.Name = _costCenter; // Id used as name omOperatingUnit.NameAlias = _costCenter; omOperatingUnit.omOperatingUnitType = OMOperatingUnitType::OMCostCenter; omOperatingUnit.LanguageId = CompanyInfo::languageId(); if (omOperatingUnit.validateWrite()) { omOperatingUnit.insert(); } ttscommit; } } } |
SysOperation-Framework: Markierte Datensätze einer temporären Tabelle übergebenIm folgenden Szenario sollen an ein SysOperation-Konstrukt alle Datensätze einer temporären Tabelle übergeben werden. Dafür brauchen wir:
Controllerclass TutorialSysOperationController extends SysOperationServiceController { } |
Preisinformationen auf Positionen per Code eintragen und Preisfindung kontrollierenEine häufige Anforderung in Projekten ist es, daß Auftrags- oder Bestellpositionen durch irgendeine Programmlogik erstellt werden sollen, beispielsweise durch Datenimporte o.ä. Zuletzt hatte ich erstmalig die Anforderung, daß per Code generierten Auftragspositionen anschließend aber manuell bearbeitet werden sollen, wobei die Preisinformationen wie Verkaufspreis und -rabatt aber unbedingt erhalten bleiben sollten. Bearbeitet man in Dynamics AX aber bestimmte Felder einer Position, löst dies aber u.U. eine Preisfindung aus. Diese galt es also zu verhindern bzw. durch eine Abfrage den Benutzer zumindest davor hinzuweisen. Glücklicherweise gibt es eine solche Abfrage bereits, die über die folgenden Felder gesteuert wird:
| ||||||||
Zerlegen einer Zeichenkette mit fixen TrennzeichenDie nachstehenden Snippets sollen zeigen, wie man aus einem String mit fixen Trennzeichen die einzelnen Elemente extrahieren kann. Variante 1: Den String mithilfe der Funktion str2con() in einen Container umwandeln static void Job1(Args _args) { str paramAsStr = "Wert1@@Wert2@@Wert3"; container paramAsCon; int i; paramAsCon = str2con(paramAsStr, "@@"); for (i=1;i<=conLen(paramAsCon);i++) { info(conPeek(paramAsCon, i)); } } Variante 2: Den String unter Verwendung der Funktion strSplit() in eine List umzuwandeln static void Job1(Args _args) { str paramAsStr = "Value 1|Value 2|Value 3"; List paramAsList; ListEnumerator le; paramAsList = strSplit(paramAsStr, "|"); le = paramAsList.getEnumerator(); while(le.moveNext()) { info(le.current()); } }
|
|
|
|
|
|
|
Der nachstehende Code stellt die einfachste Möglichkeit dar, wie man eine Funktion über das SysOperation-Framework umsetzt. Ganz ohne DataController, Dataprovider und UIBuilder. Nur über eine Service-Klasse und ein MenuItem.
Service
Die Methode runService() ist die eigentliche Service-Methode. Über das Attribute SysEntryPointAttribute steuern wir hier, daß keine weiteren Berechtigungsprüfungen notwendig sind.