17.08.2007, 20:54 | #1 |
Участник
|
jinx: Microsoft Dynamics AX API – Teil 1 „Erstellen von Auftr?gen“
Ein Auftrag umfasst in Microsoft Dynamics AX immer einen Datensatz in der Tabelle„SalesTable“ (Auftragskopf) und wenn der Auftrag einen Artikel enth?lt (Auftragsposition),auch einen Datensatz in der Tabelle „SalesLine“. Zus?tzlich werden in Abh?ngigkeitvon den Daten des Auftrags (Einmalkunde: Ja/Nein, Intercompany: Ja/Nein, etc.) zus?tzlicheDatens?tze in anderen Tabellen erzeugt bzw. ge?ndert. Beispielhaft sei hier die Tabelle„CustTable“ genannt. In dieser wird ein neuer Kunde erstellt, wenn beim Erstellendes Auftrags angegeben wurde, dass es sich um einen Einmalkunden handelt. Ein weiteresBeispiel w?re die Tabelle „MarkupTrans“ in der in Abh?ngigkeit von den Einstellungenf?r Sonstige Zuschl?ge ebenfalls weitere Datens?tze erzeugt werden.
Die Logik, die das Erstellen der einzelnen Datens?tze der verschiedenen Tabellen steuert(die so genannte Gesch?ftslogik) wird in Microsoft Dynamics AX durch die Klassen „SalesTableType“(Abbildung 1) und „SalesLineType“ (Abbildung 2), sowie deren abgeleiteten Klassenabgebildet. Diese Klassen steuern das Verhalten bei Anlage, ?nderung und L?schungeines Auftrags. Dies beinhaltet auch, welche Werte ein Feld bei welchem Auftragstypannehmen darf, was geschieht wenn ein Feld ge?ndert wird, was wird wie gebucht undso weiter. Diese Klassen werden von ?berschriebenen Methoden der Tabellen „SalesTable“ und „SalesLine“aufgerufen. So ruft zum Beispiel die Methode „Insert“ der Tabelle „SalesTable“, dieMethode „Insert“ der Klasse „SalesTableType“ auf. Abh?ngig vom Auftragstyp wird ?berdie Methode „construct“ bei der Initialisierung eines „SalesTableType“ Objekts gesteuert,welches konkrete Objekt erzeugt wird („SalesTableType_Sales“, „SalesTableType_ItemReq“,etc.). Unter anderem sind weiterhin die Methoden „Update“, „Delete“, „InitValue“, „ValidateField“und „Delete“ auf die gleiche Weise ?berschrieben. Ein Blick in die Methoden der Tabelle„SalesTable“ oder „SalesLine“ sollte dies verdeutlichen. Somit gestaltet sich das Erstellen eines neuen Auftrags sehr einfach, da die gesamteGesch?ftslogik die hinter einem Auftrag steht, automatisch aufgerufen wird. Um einen neuen Auftrag zu erstellen muss im Wesentlichen nur
Hierzu ein Beispiel: void createSalesTableAndLine() { AccountNum custAccount = ; ItemId itemId = ; SalesTablesalesTable; SalesLine salesLine; NumberSeq NumberSeq; ; //Auftragskopf(SalesTable) //NeueAuftragsnummer aus Nummernkreis erzeugen NumberSeq = NumberSeq::newGetNumFromCode( SalesParameters::numRefSalesId().numberSequence); salesTable.SalesId = NumberSeq.num(); //Auftragskopfinitialisieren salesTable.initValue(); salesTable.CustAccount = custAccount; //Initialisierungder kundenspezifischen Auftragsdaten salesTable.initFromCustTable(); //Auftragskopferstellen salesTable.insert(); //Auftragsposition(SalesLine) salesLine.clear(); //Zuweisenvon Auftragsnummer und Artikelnummer salesLine.SalesId = salesTable.SalesId; salesLine.ItemId = itemId; //Auftragspositionerstellen (ruft SalesTable.insert auf) salesLine.createLine(NoYes::Yes, NoYes::Yes, NoYes::Yes, NoYes::Yes, NoYes::Yes,NoYes::Yes); } Es wird keine Haftung oder Gew?hrleistung auf die Richtigkeit der gemachten Angaben gegeben. Die Verwendung erfolgt auf eigene Gefahr. Copyright © Mathias F??ler * jinx's AX Blog http://starside.eu * More... |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|