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

RSS-Feed dieser Version
E-Mail-Versand über SysOutgoingEmailTable
18.10.2015Microsoft Dynamics AX (Axapta)
Der nachstehende Job demonstriert, wie man per Code ein E-Mail versenden kann und dabei sowohl den Betreff als auch den Text flexibel steuern kann. Dafür stehen in Dynamics AX die sog. E-Mail-Vorlagen zur Verfügung, die in verschiedenen Sprachen hinterlegt werden können und wo auch Platzhalter (in meinem Beispiel CustAccount und CustName) verwendbar sind. Die E-Mails werden vor dem Versand in einer Tabelle SysOutgoingEmailTable gespeichert wo man deren Sendestatus bebachten kann. Voraussetzung für den Job sind eingerichtete E-Mail-Parameter (Stichwort SMTP-Server) sowie daß die Stapelverarbeitung läuft, die für die Abarbeitung der Tabelle SysOutgoingEmailTable verantwortlich ist. static void sendMailOutgoingEmailTable(Args _args) { Map mappings = new Map(Types::String, Types::String); mappings.insert("CustAccount", "4711"); mappings.insert("Custname", "schweda.net"); SysEmailTable::sendMail("MyTemplate", // Template-ID "de-at", // Language "heinz.schweda@schweda.net", // Recipient mappings, // Placeholder-Map "", // Attachment-Filename "", // XML true); // Use SysOutgoingEmailTable } |
Daten aus mehreren Datensätzen zu einem Feld zusammenführen mit Hilfe von Computed Columns
19.09.2015Microsoft Dynamics AX (Axapta)
Computed Columns von Views sind ein recht mächtiges Werzeug, wenn es darum geht komplexe SQL-Abfragen auch in Dynamics AX abzubilden. private static server str compColLanguageNames() { #define.ViewName("ItemNameView") #define.DataSourceName("InventTable") #define.FieldProduct("Product") DictView dictView; str sProduct; str translationSQLStr; dictView = new DictView(tableNum(#ViewName)); sProduct = dictView.computedColumnString (#DataSourceName, #FieldProduct, FieldNameGenerationMode::FieldList, true); translationSQLStr = strFmt(@"SELECT Name + ' ' AS 'data()' FROM EcoResProductTranslation WHERE EcoResProductTranslation.Product = %1 FOR XML PATH('')", sProduct); return strFmt("isNUll((%1), (''))", translationSQLStr); } Das Ergebnis sieht im Tablebrowser wie folgt aus: |
Erstellen einer Nicht-Primären AdresseBeispiel, wie man per Code eine nicht-primäre Adresse für einen Eintrag im Globalen Adressbuch erstellen kann. static void createPartyAddressNonPrimary(Args _args) { DirPartyTable dirPartyTable = DirPartyTable::findByNum("???100000??"); DirParty dirParty; DirPartyPostalAddressView dirPartyPostalAddressView; // Create instance of dirParty dirParty = DirParty::constructFromCommon(dirPartyTable, DirUtility::getCurrentDateTime(), dirPartyTable.partyType()); // Create primary address dirPartyPostalAddressView.LocationName = "Delivery"; dirPartyPostalAddressView.City = "Vienna"; dirPartyPostalAddressView.Street = "Kärtnerring"; dirPartyPostalAddressView.StreetNumber = "21"; dirPartyPostalAddressView.CountryRegionId = "AUT"; dirPartyPostalAddressView.IsPrimary = NoYes::No; dirParty.createOrUpdatePostalAddress(dirPartyPostalAddressView); } |
Beim Öffnen einer Form den Filter aufmachenUm direkt beim Öffnen eines Formulares das Filter-Fenster zu öffnen, kann man beispielsweise diesen Code verwenden: public void run() { super(); if(dataSourceName_ds.queryRun().prompt()) { dataSourceName_ds.research(); } }
|
Auftragsposition per Code stornierenDer folgende Code basiert auf der Logik im Formular SalesUpdateRemain (Schaltfläche "Rest liefern" im Auftragskopf). static void cancelSalesLine(Args _args) { boolean updated; SalesLine salesLine; try { ttsBegin; salesLine = SalesLine::findInventTransId('012411', true); updated = SalesUpdateRemain::updateDeliveryRemainder(salesLine, 0, 0); if(updated) { info("Salesline canceled"); } ttsCommit; } catch { error("SalesLine could not be canceled"); } } |
Geänderte Objekte innerhalb eines Layers ausgeben, die noch nicht zur Versionskontrolle hinzugefügt wurdenMithilfe der SysModel*-Tabellen kann man in Dynamics AX den AOT nach bestimmten Objekten bzw. deren Eigenschaften durchsuchen. Ein Beispiel dazu habe ich bereits hier gepostet. |
|
|
|
|
|
|
Vor kurzem bin ich in Dynamics AX 2012 auf eine Klasse gestossen, die die eine oder andere nützliche Funktion zur Verfügung stellt. Es handelt sich hierbei um die Klasse smmUtitlity.
In dieser Klasse gibt es beispielsweise eine Methode, mit der ich per Code Formulare öffnen kann. Ich habe diese Methode gleich mal eingesetzt, um eine jumpRef()-Methode (Details anzeigen) damit zu realisieren.