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

Momentan angezeigt werden nur Beiträge, welche für die Dynamics AX-Version »Dynamics AX 2012« relevant sind. Filter entfernen

RSS-Feed dieser Version
Momentan angezeigt werden nur Beiträge von »2015«.

Erstellen einer AX<Table>-Klasse II

Benötigt man für eine Tabelle eine sog. AX<Table>-Klasse kann man sich diese mit Hilfe der Klasse AxGenerateAxBCClass generieren lassen.

Dazu einfach diese Klasse im AOT per rechter Maustaste aufrufen und dem Assistenten folgen oder folgenden Job anpassen und ausführen:

static void generateAXTableClass(Args _args)
{
    AxGenerateAxBCClass axGenerateAxBCClass;
    
    axGenerateAxBCClass = new AxGenerateAxBCClass();
    axGenerateAxBCClass.parmTableId(tableNum(MyNewTable));
    axGenerateAxBCClass.run();
}

Die auf diese Art & Weise generierte Klasse muss unter manchen Umständen noch etwas bearbeitet werden, dennoch geht der Vorgang rascher von der Hand, als die Klasse komplett selbst erstellen zu müssen.

Und wenn sich die Tabelle ändert, beispielweise wenn neue Felder hinzukommen, kann man die AxGenerateAxBCClass einfach nochmals aufrufen und die AX<Table>-Klasse wird entsprechend erweitert.

Wie man solche AX-Klassen verwendet, habe ich u.a. hier beschrieben.


 
 

Kontaktinformation zu einer Entität hinzufügen

Anbei ein Beispiel, wie man per Code zu einem bestehenden Eintrag im Globalen Adressbuch Kontaktinformationen hinzufügen kann.

static void createPartyContactInfo(Args _args)
{
    DirPartyTable dirPartyTable = DirPartyTable::findByNum(??"100000");
    DirParty dirParty;
    DirPartyContactInfoView dirPartyContactInfoView;

    // Edit Global address book
    dirParty = DirParty::constructFromCommon(dirPartyTable, DirUtility::getCurrentDateTime(), DirPartyType::Organization);

    // Create contact info
    dirPartyContactInfoView.LocationName    ='Office';
    dirPartyContactInfoView.Locator         ='+43 1 4654646';
    dirPartyContactInfoView.Type            = LogisticsElectronicAddressMethodType::Phone;
    dirPartyContactInfoView.IsPrimary       = NoYes::Yes;

    dirParty.createOrUpdateContactInfo(dirPartyContactInfoView);
}

Im AX stellt sich ein solcher Eintrag wie folgt dar:

Screenshot


 
 

AX 2012: Beispiel für den Einsatz einer Computed Column II

Der folgende Code zeigt, wie man mit Hilfe einer Computed Column eine einfache Multiplikation auf Datenbank-Ebene ausführen kann.

private static server str compColLineAmountMST()
{
     #define.ViewName("PurchLineExpanded")
     #define.DataSourceName("PurchLine")
 
     return SysComputedColumn::multiply(SysComputedColumn::returnField(#ViewName, #DataSourceName, fieldStr(PurchLine, PurchPrice)),
                                        SysComputedColumn::returnField(#ViewName, #DataSourceName, fieldStr(PurchLine, PurchQty))); 
}

Das Ergebnis sieht wie folgt aus (Spalte PurchLineAmount):

Screenshot

Kleiner Tipp: Es gibt noch zahlreiche Methoden wie die oben verwendete multiply(), mehr dazu auf der MSDN.
 


 
 

Geänderte Objekte innerhalb eines Layers ausgeben

Um den AOT nach bestimmten Objekten zu durchsuchen, kann man in AX die TreeNode-Klasse verwende. Einige Beispiele dazu habe ich hier ja auch schon in der Vergangenheit gepostet.

In Dynamics AX 2012 ist eine neue Möglichkeit hinzugekommen, und zwar gibt es in der Datenbank nun einige Tabelle die mit SysModel* beginnen. Diese Tabellen kann man ebenfalls dazu verwenden, den AOT nach Objekten/Eigenschaften zu durchsuchen.

Ein Beispiel für eine solche Abfrage ist der folgende Job, der einfach alle Objekte (unsortiert) ausgibt, die im aktuellen Layer angepasst wurden. Beim Aufruf des jobs kann zuvor der Query geändert werden, um die Abfrage weiter einzuschränken.


 
 

Stückliste per Code erstellen

Mit dem folgenden Code kann man eine Stückliste inkl. Stücklistenversion per Code erstellen.

static void createBomTableVersion(Args _args)
{
    AxBOMTable axBOMTable;
    AxBOMVersion axBOMVersion;
    AxBOM axBOM;
    InventTable inventTable = InventTable::find("100160");
    InventDim inventDim;

    try
    {
        ttsbegin;

        // BOM Table
        axBOMTable = AxBOMTable::construct();
        axBOMTable.validateInput(true);
        axBOMTable.continueOnError(false);
        axBomTable.parmBOMId(BOMTable::numberSeq().num());   
        axBOMTable.parmItemGroupId(inventTable.itemGroupId());
        axBOMTable.parmApprover(HcmWorker::userId2Worker(curUserId()));
        axBOMTable.parmApproved(NoYes::Yes);
        axBOMTable.parmName("Name of BOM");
        axBOMTable.parmSiteId("GF");

        axBOMTable.save();

        // BOM Version
        inventDim.clear();
        inventDim.InventSiteId = axBOMTable.parmSiteId();
        inventDim = InventDim::findOrCreate(inventDim);

        axBOMVersion = AxBOMVersion::construct();
        axBOMVersion.validateInput(true);
        axBOMVersion.continueOnError(false);
        axBOMVersion.parmBOMId(axBOMTable.parmBOMId());
        axBOMVersion.parmItemId(inventTable.ItemId);
        axBOMVersion.parmApprover(HcmWorker::userId2Worker(curUserId()));
        axBOMVersion.parmApproved(NoYes::Yes);
        axBOMVersion.parmActive(NoYes::Yes);
        axBOMVersion.parmInventDimId(inventDim.InventDimId);
        axBOMVersion.save();

        // BOM
        inventDim.clear();
        inventDim.InventSiteId = axBOMTable.parmSiteId();
        inventDim.ConfigId = "RoundNeck";
        inventDim.InventSizeId = "XS";
        inventDim.InventStyleId = "SlimFit";
        inventDim.InventColorId = "Blue";
        inventDim.InventLocationId = "902";
        inventDim = InventDim::findOrCreate(inventDim);

        axBOM = AxBOM::construct();
        axBOM.validateInput(true);
        axBOM.continueOnError(false);
        axBOM.parmBOMId(axBOMTable.parmBOMId());
        axBOM.parmItemId("100158");
        axBOM.parmInventDimId(inventDim.InventDimId);
        axBOM.parmBOMQty(17);
        axBOM.save();

        ttscommit;
    }
    catch
    {
        throw error("BOM creation failed");
    }
}

 
 

Die "Details anzeigen"-Funktion für eine als einzelnes Feld eingebundene Finanzdimension einbinden

In diesem Beitrag habe ich beschrieben, wie man eine einzelne Finanzdimension als eigenes Feld einbinden kann.

Dies ist ein Folgebeitrag und soll demonstrieren, wie man für ein solches Feld die "Details anzeigen"-Funktion programmieren kann.


 
 

Eine Lookup-Methode für ein als einzelnes Feld eingebundene Finanzdimension überschreiben

In diesem Beitrag habe ich beschrieben, wie man eine einzelne Finanzdimension als eigenes Feld einbinden kann.

Dies ist ein Folgebeitrag und soll demonstrieren, wie man für ein solches Feld die lookup()-Methode überschreiben kann.


 
 
Seiten « 1 2 3 4 5 6 » 

 

 
 
 
Beiträge des aktuellen Monats
April 2015
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
27282930 
 
© 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