Dynamics AX Blog - Dynamics AX 2012 - Seite 23

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

RSS-Feed dieser Version

Welche Felder werden in einem automatisch generierten Lookup angezeigt?

Mir wurde diese Frage vor kurzem selbst gestellt und konnte diese allerdings nur zum Teil beantworten.

Ich wusste aber noch, daß ich schon einmal eine Seite gesehen hatte, wo dies genau erklärt wird. Aber ich wusste weder noch wo, noch konnte ich sie über diverse Suchmaschinen finden.

Aber in alten Unterlagen fand ich die Quelle dann doch, der Trick um die Quelle auch mit Google und Konsorten zu finden ist, mit dem altem Namen von Microsoft Dynamics AX - Axapta danach zu suchen!

Tut man dies, so findet man rasch folgende Seite:

http://www.axaptapedia.com/index.php?title=Lookups


 
 

Verwenden einer Assembly/DLL in Dynamics AX

Um eine DLL in Dynamics AX verwenden zu können, muss diese im References-Knoten des AOT hinzugefügt werden.

Dazu per rechter Maustaste auf den Knoten klicken und  Referenz hinzufügen auswählen. Dadurch öffnet sich ein Dialog, wo abhängig vom "Speicherort" der DLL wie folgt vorgegangen werden muss:

  • Wurde die DLL bereits im Global Assembly Cache (GAC) registriert, sollte sie bereits in der Liste aufscheinen wo sie nun über das Kontrollkästchen links selektiert und mit Auswählen ausgewählt werden kann.

    Um eine DLL im GAC zu registrieren ist es notwendig, daß die DLL signiert wurde.
    Registriert werden kann sie über die Kommandozeile mit folgendem Befehl
    "gacutil /i myClassLibrary.dll"
  • Wurde die DLL beispielsweise im BIN-Verzeichnis des Clients abgelegt, muss man zuerst über die Durchsuchen-Schaltfläche die DLL aus dem BIN-Verzeichnis auswählen. Nun sollte sie in der Liste aufscheinen wo sie über das Kontrollkästchen links selektiert und mit Auswählen ausgewählt werden kann.

In beiden Fällen muss nun der Dialog mit OK bestätigt werden.


 
 

Word-Dokument mit Tabelle per Code erstellen

Microsoft WordAnbei ein einfach gehaltener Job, der ein Word-Dokument mit einer Tabelle per Code erstellt. Das Beispiel legt auch den Rahmen und dessen Farbe der Tabelle fest.
Voraussetzung ist ein lokal installiertes Microsoft Word.

static void CreateWordFileWithTable(Args _args)
{
    COM wordApplication;
    COM wordTables;
    COM wordTable;
    COM wordSelection;
    COM wordTableRows;
    COM wordRange;
    COM wordTableCell;
    COM wordTableCellRange;
    COM wordDocuments;
    COM wordDocument;
    COM wordTableBorders;
    ;
 
    // Initialize Word object and document
    wordApplication = new COM("Word.Application");
    wordDocuments = wordApplication.documents();
    wordDocuments.add();
    wordDocument = wordDocuments.item(1);
 
    wordSelection = wordApplication.selection();
    wordRange = wordSelection.range();
 
    // Get table collection
    wordTables = wordSelection.tables();
 
    // Create table with 3 rows and 5 columns
    wordTable = wordTables.add(wordRange, 3, 5);
 
    // Fill cell: First line, second column
    wordTableCell = wordTable.Cell(1, 2);
    wordTableCellRange = wordTableCell.range();
    wordTableCellRange.text("Hello");

    // Fill cell: Second line, third column
    wordTableCell = wordTable.Cell(2, 3);
    wordTableCellRange = wordTableCell.range();
    wordTableCellRange.text("World");
 
    // Enable table borders
    wordTableBorders = wordTable.borders();
    wordTableBorders.enable(true);

    // Add colored borders
    wordTableBorders.InsideLineStyle(3);
    wordTableBorders.OutsideLineStyle(5);
    wordTableBorders.OutsideColorIndex(2);
 
    // Get table row collection and add a new row
    wordTableRows = wordTable.rows();
    wordTableRows.add();
 
    // Open word
    wordApplication.visible(true);
    wordApplication.finalize();
}

Das per obigem Code erstellte Word-Dokument sieht wie folgt aus:

Screenshot


 
 

AX 2012: Importieren eines Debitoren mit Hilfe des Data import/export frameworks (ODBC)

Mit Hilfe des Data import/export frameworks ist es möglich, Daten aus externen Systemen in Dynamics AX zu importieren. im folgenden möchte ich dies anhand der Anlage eines Debitoren über eine ODBC-Verbindung demonstrieren.

 

ODBC-Benutzer DSN einrichten

Screenshot

 

Erstellen einer Verarbeitungsgruppe

Erstellen einer Verarbeitungsgruppe (Processing group) unter Data import Export framework > Processing Group:

Screenshot


 
 

AX 2012: Subselects über Computed columns abbilden

Mit Hilfe von Computed columns von Views sind auch in Dynamics AX Subselects/Subqueries möglich.

Im folgenden habe ich eine Methode erstellt, die der Methode inventTable.productName() nachempfunden ist.

private static server str compColItemName()
{
    #define.ViewName("ItemNameView")

    #define.DataSourceName("InventTable")
    #define.FieldItemId("itemId")
    #define.FieldProduct("Product")
    str sProduct;
    DictView dictView;
    str translationSQLStr;
    str productSQLStr;

    dictView = new DictView(tableNum(#ViewName));

    sProduct = dictView.computedColumnString
        (#DataSourceName,
        #FieldProduct,
        FieldNameGenerationMode::FieldList,
        true);

    translationSQLStr = strFmt("SELECT Name FROM EcoResProductTranslation WHERE EcoResProductTranslation.Product = %1 AND LanguageId = '%2'", sProduct, CompanyInfo::find().LanguageId);
    productSQLStr = strFmt("SELECT DisplayProductNumber FROM EcoResProduct WHERE EcoResProduct.RecId = %1", sProduct);

    return strFmt("isNUll((%1), (%2))", translationSQLStr, productSQLStr);
}

 
 

Erstellen einer AX<Table>-Klasse

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.

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<Table>-Klassen verwendet, habe ich u.a. hier beschrieben.


 
 

Erstellen einer Entität - beispielsweise eines Debitoren - per Code unter Verwendung von AX<Table>-Klassen

Folgender Job soll veranschaulichen, wie man unter Verwendung von sog. AX<Table>-Klassen Entitäten in Dynamics AX per Code anlegen kann, ohne dabei - wie in diesem Beitrag beschrieben - direkt in die Tabellen zu schreiben.

Solche AX<Table>-Klassen stehen bereits für zahlreiche Tabellen von Haus aus zu Verfügung und es ist möglich, sich jederzeit für weitere Tabellen solche Klassen generieren zu lassen (siehe hier).

Vorteile:

  • Pflichtfelder werden geprüft
  • Datensatz wird initalisiert (d.h. die initValue() wird aufgerufen)
  • Feldinhalten werden geprüft

Nachteile:

  • Bei Feldänderung wird die Logik in der modifiedField() nicht aufgerufen
static void CreateCustomerAXClass(Args _args)
{
    AxCustTable axCustTable;
    AxDirPartyTable AxDirPartyTable;
    CustTable CustTable;
    DirPartyTable DirPartyTable;

    AccountNum accountNum     = "4711";
    Name name                 = "Debitor 4711";
    currencyCode currencyCode = "EUR";
    custGroupId custGroupId   = "DINL";
    taxGroup taxGroup         = "DINL";
    languageId languageId     = "de-AT";

    ttsBegin;

    // Create or update Customer
    axCustTable = axCustTable::construct();
    axCustTable.validateInput(true);    
    axCustTable.continueOnError(true);  // Validate fields without stopping error
    
    CustTable = CustTable::find(accountNum, true);
    if(CustTable)
    {
        axCustTable.custTable(CustTable);   // Don't use this for new records to get initValue() called
    }

    axCustTable.parmAccountNum(accountNum);
    axCustTable.parmCustGroup(custGroupId);
    axCustTable.parmTaxGroup(taxGroup);
    axCustTable.parmCurrency(currencyCode);
    
    axCustTable.save();

    // Create or update Global address book
    AxDirPartyTable = AxDirPartyTable::construct();
    AxDirPartyTable.validateInput(true);
    AxDirPartyTable.continueOnError(true);  // Validate fields without stopping error
    
    DirPartyTable = DirPartyTable::findRec(axCustTable.custTable().Party, true);
    if(DirPartyTable)
    {
        AxDirPartyTable.dirPartyTable(DirPartyTable);
    }

    AxDirPartyTable.parmName(name);
    AxDirPartyTable.parmLanguageId(languageId);
    
    AxDirPartyTable.save();

    ttsCommit;
}

 
 
Seiten « 1 ... 20 21 22 23 24 25 26 ... 38 » 

 

 
 
 
Beiträge des aktuellen Monats
Mai 2024
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
© 2006-2024 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