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

Momentan angezeigt werden nur Beiträge der Kategorie »Microsoft Dynamics AX (Axapta)« Filter entfernen

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

Infolog-Nachrichten um Prefixes erweitern

Mit setPrefix() kann man in die Infolog-Meldungen ganz einfach Verschachtelungen erzeugen.
Was ich bisher noch nicht kannte ist, daß man solche Prefixes direkt in die Meldung integrieren kann, indem man die eigentliche Meldung um die gewünschte Überschrift und das Steuerungszeichen für einen Tabulator erweitert.

static void inlinePrefix(Args _args)
{
    setPrefix("Inhaltsverzeichnis");
    info("Kapitel 1\tSeite 1");
    info("Kapitel 1\tSeite 2");
    info("Kapitel 1\tSeite 3");
    info("Kapitel 2\tSeite 4");
    info("Kapitel 2\tSeite 5\tAbschnitt 1");
    info("Kapitel 2\tSeite 5\tAbschnitt 2");
    info("Kapitel 2\tSeite 6");    
}

Das Infolog des obigen Jobs sieht wie folgt aus:

nfolog


 
 

Journal per Code sperren

Eine häufige Anforderung im Projekt-Alltag ist es, Journale verschiedenster Art per Code zu erstellen. Darüber habe ich auch schon den einen oder anderen Beitrag verfasst.

Vor kurzem hatte ich eine ähnliche Anforderung, allerdings sollte dabei das Journal nicht gleich gebucht werden, sondern es sollte nur sichergestellt sein, daß diese Journale nicht unabsichtlich von anderen Benutzern verändert werden.

Und genau für diese Anforderung ist der folgende Code gedacht:

JournalTableData::updateBlockServer(
    prodJournalTable, 
    JournalBlockLevel::None, 
    JournalBlockLevel::InUse, 
    false);

Statt wie im Beispiel die Tabelle ProdJournalTable zu serren, kann auch die InventJournalTable auf diese Art & Weise gesperrt werden.


 
 

SmmUtility/Formular per Code öffnen

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.

public void jumpRef()
{
    smmUtility::openMenuItemForm(
        menuitemDisplayStr(CustTable), 
        CustTable::find(this.valueStr()), 
        element);
}

 
 

E-Mail-Versand über SysOutgoingEmailTable

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

Computed Columns von Views sind ein recht mächtiges Werzeug, wenn es darum geht komplexe SQL-Abfragen auch in Dynamics AX abzubilden.

ScreenshotDas folgende Beispiel zeigt, wie es möglich ist mehrere Zeilen zu einem einzigen Feld zusammenzuführen.
Stellt euch vor, ihr möchtet eine Abfrage zur Verfügung stellen, wo alle Artikel/Freigegebenen Produkte aufgelistet werden (eine Zeile je Artikel) und es ein Feld gibt, in dem der Produktname in allen hinterlegten Sprachen ausgegeben wird.

Für diese Anforderung kann man folgende Methode compColLanguageNames verwenden, die ich in einen View ItemNameView als Computed Column namens AllItemNames eingebunden habe.

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:

Screenshot


 
 

Erstellen einer Nicht-Primären Adresse

Beispiel, 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 aufmachen

Um 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();
    }
}

 


 
 
Seiten « 1 ... 8 9 10 11 12 13 14 ... 52 » 

 

 
 
 
Beiträge des aktuellen Monats
April 2025
MoDiMiDoFrSaSo
 123456
78910111213
14151617181920
21222324252627
282930 
 
© 2006-2025 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu