Dynamics AX Blog - Microsoft Dynamics AX (Axapta) - Seite 40

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 KategorieAxInventTable: Artikel per Code anlegen in Dynamics AX 2009
15.05.2010Microsoft Dynamics AX (Axapta)
|
Start- und Enddatum des aktuellen Geschäftsjahres ermitteln
01.05.2010Microsoft Dynamics AX (Axapta)
Um das Start- und Enddatum des aktuellen Geschäftsjahres zu ermitteln, kann man sich nachstehender Methode bedienen. Diese liefert einen Container zurück, dessen erstes Element das Start- und dessen zweites Element das Enddatum des Geschäftsjahres enthält. ledgerPeriod::findFiscalYearDates(systemdateget()); |
Shared Project mit X++ erstellen
17.04.2010Microsoft Dynamics AX (Axapta)
Nachstehend ein Beispiel, mit dem man in Dynamics AX 2009 per X++ ein Projekt erstellen, und Elemente zu diesem Projekt hinzufügen kann. static void CreateSharedProject(Args _args)
{ projectNode projectNode; projectGroupNode projectGroupNode; projectNode myProjectNode; treeNodeName nameOfProject; groupNodeType groupNodeType; treeNodeName groupNodeName; #AOT ; nameOfProject = 'MyProject'; // Create shared project projectNode = infolog.projectRootNode(); projectNode = projectNode.AOTfindChild('Shared'); myProjectNode = projectNode.AOTfindChild(nameOfProject); if( !myProjectNode) { myProjectNode = projectNode.AOTadd(nameOfProject); myProjectNode.AOTsave(); } myProjectNode = myProjectNode.getRunNode(); // Add groupnode 'Tables' groupNodeName = 'Tables'; projectGroupNode = myProjectNode.AOTfindChild(groupNodeName); if( !projectGroupNode) { myProjectNode.AOTadd(groupNodeName); projectGroupNode = myProjectNode.AOTfindChild(groupNodeName); projectGroupNode.projectGroupType(GroupNodeType::Tables); myProjectNode.AOTsave(); } // Add some tables to groupnode 'Tables' if( !projectGroupNode.findGroupMember('SalesTable', UtilElementType::Table)) { projectGroupNode.addUtilNode(UtilElementType::Table, 'SalesTable'); } if( !projectGroupNode.findGroupMember('SalesLine', UtilElementType::Table)) { projectGroupNode.addUtilNode(UtilElementType::Table, 'SalesLine'); } projectGroupNode.AOTsave(); // Add groupnode 'Forms' groupNodeName = 'Forms'; projectGroupNode = myProjectNode.AOTfindChild(groupNodeName); if( !projectGroupNode) { myProjectNode.AOTadd(groupNodeName); projectGroupNode = myProjectNode.AOTfindChild(groupNodeName); projectGroupNode.projectGroupType(GroupNodeType::Forms); myProjectNode.AOTsave(); } // Add form 'SalesTable' to groupnode 'Forms' if( !projectGroupNode.findGroupMember('SalesTable', UtilElementType::Form)) { projectGroupNode.addUtilNode(UtilElementType::Form, 'SalesTable'); } projectGroupNode.AOTsave(); myProjectNode.AOTsave(); myProjectNode.AOTrefresh(); myProjectNode.AOTrun(); } Das im Beispiel erstellte Projekt sähe wie folgt aus: |
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()); } |
Buchen von Lieferschein und Rechnung per Code
19.03.2010Microsoft Dynamics AX (Axapta)
Mit Hilfe der salesFormLetter-Klasse(n) von Dynamics AX ist es möglich, Auftragsbestätigung, Lieferschein und/oder Rechnung für einen Auftrag mit nur wenigen Zeilen Code zu buchen. Nachstehend ein Beispiel, in dem für einen Auftrag alle drei auf einmal gebucht werden: static void postSalesFormLetter(Args _args)
{ SalesFormLetter salesFormLetter; salesTable salesTable = salesTable::find('01234'); ; ttsBegin; // Bestätigung buchen salesFormLetter = SalesFormLetter::construct(DocumentStatus::Confirmation); salesFormLetter.update( salesTable, systemDateGet(), SalesUpdate::All, AccountOrder::None, NoYes::No, NoYes::No); // Lieferschein buchen salesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip); salesFormLetter.update( salesTable, systemDateGet(), SalesUpdate::All, AccountOrder::None, NoYes::No, NoYes::No); // Rechnung buchen salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice); salesFormLetter.update( salesTable, systemDateGet(), SalesUpdate::All, AccountOrder::None, NoYes::No, NoYes::No); ttsCommit; } Getestet in Dynamics AX 2009. |
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:
| ||||||||||
startUpCmd=compileAll
25.02.2010Microsoft Dynamics AX (Axapta)
Mit Hilfe dieses Parameters von Dynamics AX ist es möglich, eine vollständige Kompilierung der Applikation zu initieren. Dabei sind folgende drei Varainten verfügbar: 1.) Kompiliert die Applikation und aktualisiert - soferne dies in den Benutzeroptionen so festgelegt ist - auch die Querverweise
2.) Kompilieren der Applikation inkl. Aktualisierung der Querverweise
3.) Kompiliert die Applikation ohne die Querverweise zu aktualisieren
In allen drei Fällen wird übrigens - zumindest in AX 2009 - eine Level 4-Kompilierung initiert, d.h. die Applikation wird auch hinsichtlich Best-Practice-Abweichungen geprüft. Das Ergebnis der Kompilierung ist anschließend in der Datei AxCompileAll.html im Log-Verzeichnis lt. Client-Configuration zu finden. |
|
|
|
|
|
|
Um einen Artikel in Dynamics AX 2009 anzulegen kann man sich - wie schon in früheren Versionen - der Klasse axInventTable bedienen. Dies Klasse hat den grossen Vorteil, daß sie sich auch um jene Tabellen kümmert, die neben der inventTable befüllt werden müssen, also die drei Datensätze in der inventTableModule und jenen in der InventItemLocation, sodaß der Artikel sofort in der Form InventTable aufscheint.
{
axInventTable axInventTable;
;
axInventTable = axInventTable::construct();
axInventTable.parmItemId('NewItemId');
axInventTable.save();
}
Etwas sollte man bei Verwendung der Klasse allerdings berücksichtigen: Obiger Job erstellt den Artikel, ohne eventuelle Pflichtfelder wie z.B. die Artikelgruppe zu befüllen. Das aber auch nur, wenn es keine Datensatzvorlage vom Typ Unternehmensvorlage gibt. Gibt es eine solche Standardvorlage für den Artikelstamm, so nutzt AX diese!