Dynamics AX Blog - Seite 13

AX 2012: Display-Methoden im Lookup II

Mit Hilfe der Klasse SysTableLookup kann man sich den Lookup von Formularfeldern anpassen. Über die Methode addLookupMethod() können in diese Lookup-Formulare auch Display-Methoden eingebunden werden. Wichtig dabei ist lediglich, daß im Lookup alle Felder eingebunden werden (beispielsweise über addSelectionField()), die von der jeweiligen Display-Methode zur Ermittlung benötigt werden.

Will man beispielsweise das Lookupformular der Artikelnummer um den Produktnamen erweitern, kann man dafür die folgende Methode nutzen. Hierbei ist beispielsweise das Feld Product der InventTable nur enthalten, um die Display-Methode itemName() im Lookup verwenden zu können.

public client static void lookupItemId(FormStringControl _lookupCtrl)
{
    sysTableLookup sysTableLookup;
    query query;
    QueryBuildDataSource qbds_inventTable;

    query = new query();

    qbds_inventTable = query.addDataSource(tableNum(inventTable));

    sysTableLookup = sysTableLookup::newParameters(tableNum(inventTable), _lookupCtrl);
    sysTableLookup.parmQuery(query);
    sysTableLookup.addLookupfield(fieldNum(inventTable, itemId));
    sysTableLookup.addLookupMethod(tableMethodStr(inventTable, itemName));
    sysTableLookup.addLookupfield(fieldNum(inventTable, NameAlias));
    sysTableLookup.addLookupfield(fieldNum(inventTable, ItemType));
    sysTableLookup.addSelectionField(fieldNum(inventTable, product));

    sysTableLookup.performFormLookup();
}

 
 

Projekt beim Starten der Entwicklungsumgebung öffnen

Kurzer Tipp für zwischendurch: Wer längere Zeit an ein und dem selben Projekt arbeitet, kann sich dieses Projekt in den Benutzeroptionen unter Extras > Optionen im Register Entwicklung als Start Projekt hinterlegen.

Screesnhot


 
 

Bestellposition per Code erstellen

Ein einfach gehaltenes Beispiel wir man unter Verwendung der AX<Table>-Klasse der Tabelle PurchLine eine Bestellposition per Code erstellen kann.

static void createPurchLine(Args _args)
{
    axPurchLine axPurchLine;
    purchLine purchLine;
   
    axPurchLine = AxPurchLine::newPurchLine(purchLine);
    axPurchLine.validateInput(true);
    axPurchLine.continueOnError(false);
   
    axpurchLine.parmPurchId("P00001");
    axpurchLine.parmItemId("1000");
    axPurchLine.parmPurchQty(10);
    axPurchLine.parmPurchPrice(24.50);
    axPurchLine.save();
}

 
 

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.


 
 
Seiten « 1 ... 10 11 12 13 14 15 16 ... 53 » 

 

 
 
 
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