Dynamics AX Blog - Dynamics AX 4.0 - Microsoft Dynamics AX (Axapta) - Seite 3

In den letzten Jahren, in denen ich mich fast hauptsächlich mit der Entwicklung im Umfeld von Microsoft Dynamics AX (vormals Axapta) beschäftigt habe, ist das eine oder andere Code-Fragment entstanden, von dem ich mir vorstellen könnte, daß es auch für andere AX-Entwickler ganz nützlich sein könnte. Aber auch Tips und Tricks zu dem mächtigen ERP-System werde ich in dieser Kategorie präsentieren.
RSS-Feed dieser Kategorie
RSS-Feed dieser Version
Praktisches Beispiel für die Verwendung des runBaseBatch-Frameworks
20.03.2011Microsoft Dynamics AX (Axapta)
|
Fehler beim Aufrufen des ActiveX-Controls NETRONIC VARCHART XGantt in Dynamics AX
09.10.2010Microsoft Dynamics AX (Axapta)
Ich habe mich schon seit längerem über zahlreiche Fehlermeldungen gewundert, die immer dann aufgetreten sind, wenn ich ein Formular geöffnet habe wo das ActiveX-Control NETRONIC VARCHART XGantt eingebettet war, z.B. das Formular Simultanplanungslauf. Folgende Fehlermeldungen hatte ich da am Bildschirm: ActXBaseControl::Open failure Eigentlich ist die Lösung ganz einfach! Ich arbeite natürlich auf einer Entwickler-Maschine, wo unterschiedlichste Versionen von Dynamcs AX/Axapta parallel installiert sind. Und die zuerst installierte und somit älteste Version bestimmt die aktuell verwendete Version der ActiveX-Komponente. Also ist folgendes zu tun: Deinstallieren der "veralteten" Version und installieren bzw. registrieren einer neueren Version z.B. über die Kommandozeile. REM Uninstall old version
|
Shared Project mit X++ erstellen II
05.08.2010Microsoft Dynamics AX (Axapta)
In einem früheren Beitrag habe ich ja hier schon einen Job veröffentlicht, mit dessen Hilfe man sich per X++ ein Shared Project erstellen kann. Basierend auf der neu entdeckten Funktion selectMultiple habe ich diesen nun etwas erweitert, der Benutzer hat mit dessen Hilfe nun die Möglichkeit, ein Shared Project zu erstellen und dabei für die aktuell benötigten Datentypen eigene Gruppenknoten innerhalb dieses Projektes zu erstellen. static void CreateSharedProjectUsingSelectMultiple(Args _args)
{ DictEnum DictEnum; container conValues; container conSelectedValues; container conSelectMultiple; int i; projectNode projectNode; projectGroupNode projectGroupNode; projectNode myProjectNode; treeNodeName nameOfProject; groupNodeType groupNodeType; treeNodeName groupNodeName; dialog dialog; dialogField dfProjectName; #AOTExport ; // Create dialog dialog = new dialog(); dfProjectName = dialog.addFieldValue(typeId(treeNodeName), "NameOfproject", "Name of project"); if( !dialog.run()) { return; } nameOfProject = dfProjectName.value() ? dfProjectName.value() : "Unknown"; // Add available values to container DictEnum = new DictEnum(enumName2Id(identifierStr(GroupNodeType))); for(i=1;i<DictEnum.values();i++) { conValues = conIns(conValues, conLen(conValues)+1, [DictEnum.index2Label(i), i, false]); } // Call selectMultiple conSelectMultiple = selectMultiple("Please select", "Please select the needed project-groups", conValues); conSelectedValues = conPeek(conSelectMultiple, 2); if( !conPeek(conSelectMultiple, 1)) { return; } // Create shared project projectNode = infolog.projectRootNode(); projectNode = projectNode.AOTfindChild(#expProjectShared); myProjectNode = projectNode.AOTfindChild(nameOfProject); if( !myProjectNode) { myProjectNode = projectNode.AOTadd(nameOfProject); myProjectNode.AOTsave(); } myProjectNode = myProjectNode.getRunNode(); if(conPeek(conSelectMultiple, 1)) { for (i=1; i<=conLen(conSelectedValues); i++) { groupNodeName = DictEnum.index2Label(conPeek(conSelectedValues, i)); projectGroupNode = myProjectNode.AOTfindChild(groupNodeName); if( !projectGroupNode) { myProjectNode.AOTadd(groupNodeName); projectGroupNode = myProjectNode.AOTfindChild(groupNodeName); projectGroupNode.projectGroupType(DictEnum.name2Value(groupNodeName)); myProjectNode.AOTsave(); } } } projectGroupNode.AOTsave(); myProjectNode.AOTsave(); myProjectNode.AOTrefresh(); myProjectNode.AOTrun(); } Obiger Code funktioniert meines Wissens nach in Dynamics AX 4.0 und Dynamics AX 2009.
|
Palette verlagern per X++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 wmsPalletMove = new wmsPalletMove();
wmsPalletMove.parmWMSPalletId('00000022_117'); wmsPalletMove.parmToInventLocationId('300'); wmsPalletMove.parmToLocationId('01'); if(wmsPalletMove.validate()) { wmsPalletMove.run(); }
|
Zugriff auf die Zwischenablage per X++
26.03.2010Microsoft Dynamics AX (Axapta)
In Dynamics AX kann man selbstverständlich auch auf die Zwischenablage zugreifen, ein kurzes Codebeispiel dazu im folgenden. Funktioniert übrigens zumindest seit Axpata 2.5. static void useClipboard(Args _args) { textBuffer textBuffer = new textBuffer(); ; // Write to clipboard textBuffer.appendText('Hello world!'); textBuffer.toClipboard(); // Read from clipboard textBuffer.fromClipboard(); info(textBuffer.getText()); } |
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.
| ||||||||
|
|
|
|
|
|
Vor einiger Zeit habe ich schon einmal einen Eintrag über das runBaseBatch-Framework geschrieben, damals ging's hauptsächlich um die Aufrufreihenfolge der einzelnen Methoden und wofür einige von diesen Methoden verwendet werden können bzw. verwendet werden sollten.
Nun habe ich mir basierend auf diesem Eintrag und vor allem aufgrund von Erfahrungswerten eine eigene Klasse namens tutorial_ClassWithQueryRun geschrieben, die einige oft benötigte Anforderungen vereinigt.
Diese Klasse vereint folgende Fähigkeiten: