Dynamics AX Blog - Dynamics AX 2009 - Microsoft Dynamics AX (Axapta) - Seite 5

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
Momentan angezeigt werden nur Beiträge, welche für die Dynamics AX-Version »Dynamics AX 2009« relevant sind. Filter entfernen

RSS-Feed dieser Version

Word-Dokument per Code erstellen II

Microsoft WordAnbei ein einfach gehaltener Job, der ein einfaches Word-Dokument mit Überschriften per Code erstellt. Voraussetzung ist ein lokal installiertes Microsoft Word.

static void CreateWordFile(Args _args)
{
    COM wordApplication;
    COM wordDocuments;
    COM wordDocument;
    COM wordRange;
    COM wordSelection;
    COM wordStyles;
   
    #define.Heading1(-2)
    #define.Heading2(-3)
    #define.Heading3(-4)
    #define.Heading4(-5)
    #define.Heading5(-6)   
   
    void insertHeader(str _str, int _level)
    {
        COM wordStyle;
        wordSelection = wordApplication.selection();

        switch( _level )
        {
            case 1:
                wordStyle = wordStyles.item(#Heading1);
                break;
            case 2:
                wordStyle = wordStyles.item(#Heading2);
                break;
            case 3:
                wordStyle = wordStyles.item(#Heading3);
                break;
            case 4:
                wordStyle = wordStyles.item(#Heading4);
                break;
            case 5:
                wordStyle = wordStyles.item(#Heading5);
                break;
            default:
                wordStyle = wordStyles.item(#Heading3);
        }       
       
        wordSelection.style(wordStyle);

        wordSelection.TypeText(_str);

        wordSelection.TypeParagraph();
    }   
   
    wordApplication = new COM("word.application");
    wordApplication.visible(TRUE);
    wordDocuments = wordApplication.Documents();
    wordDocument = wordDocuments.add();
    wordDocument.saveas(@"c:\temp\LoremIpsum.doc");
    wordDocument.activate();

    wordStyles = wordDocument.styles();

    wordRange = wordDocument.range(0,0);   
   
    // Let's go
    insertHeader("Lorem ipsum", 1);
    wordSelection.TypeText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam");
    wordSelection.TypeParagraph();
   
    insertHeader("Lorem ipsum", 2);
    wordSelection.TypeText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam");
    wordSelection.TypeParagraph();
   
    wordSelection.TypeText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut");
    wordSelection.TypeParagraph();
   
    // Finish
    wordDocument.save();
    wordDocument.close();
    wordApplication.quit();   

}

So sieht das Word-Dokument aus, daß mit obigem Code erstellt wurde:

Lorem Ipsum Word-file


 
 

Formular per Code öffnen

Nachstehend ein paar Beispiele, wie man ein Formular per Code aufrufen kann. Wobei jede Variante ihr Vor- oder Nachteile bietet. Beispielsweise gibt es Varianten, wo man einen Datensatz übergeben kann, der angezeigt werden soll. Andere wieder bieten die Möglichkeit ganze Queries zu übergeben oder aber festzulegen, ob man im Grid oder im Detail-View öffnen möchte. Es sollte also für ziemlich jeden Anwendungsfall etwas dabei sein ;-)

static void openFormThroughCode_0(Args _args)
{
    menuFunction menuFunction;
    args args;
    CustTable custTable = CustTable::find('1101');
   
    args = new args();
    args.record(CustTable);
    args.formViewOption(FormViewOption::Grid);
   
    menuFunction::runClient(identifierStr(custTable), MenuItemType::Display, false, args);
}

 

static void openFormThroughCode_I(Args _args)
{
    FormRun formRun;
    args args = new args();
    args.name(formstr(CustTable));
    args.formViewOption(FormViewOption::Grid);
   
    formRun = classFactory.formRunClass(args);
    formRun.run();
    formRun.wait();
}

 
 

Labels mit Zeilenumbrüchen korrekt ausgeben

Manche Labels enthalten Zeilenumbrüche (\n). Möchte man ein solches Label über das Infolog ausgeben, sollte man die Funktion strFmtLB wie folgt verwenden:

// Wrong
info(strFmt("@SYS322576", "AccountsPayableServices", "Allgemeiner Fehler"));

// Correct
info(strFmtLB(strFmt("@SYS322576", "AccountsPayableServices", "Allgemeiner Fehler")));

 
 

Word-Dokument per Code erstellen

Microsoft WordAnbei ein einfach gehaltener Job, der ein einfaches, mehrzeiliges Word-Dokument per Code erstellt. Voraussetzung ist ein lokal installiertes Microsoft Word.

static void CreateWordFile(Args _args)
{
    COM wordApplication;
    COM wordDocuments;
    COM wordDocument;
    COM wordSelection;
    Filename fileName = @"c:\temp\HelloWorld.doc";
    int i;

    try
    {
        wordApplication = new COM("word.application");
        wordApplication.visible(false);
        wordDocuments = wordApplication.Documents();
        wordDocument = wordDocuments.add();
        wordDocument.saveas(fileName);
        wordDocument.activate();

        for (i=1; i<=5; i++)
        {
            wordSelection = wordApplication.selection();
            wordSelection.TypeText(int2str(i) + " Hello World!");
            wordSelection.TypeParagraph();
        }

        wordDocument.save();
        wordDocument.close();
        wordApplication.quit();                           
       
        info(strFmt("Datei %1 wurde erstellt.", fileName));
    }
    catch
    {
        if(wordDocument)
        {
            wordDocument.close();
            wordApplication.quit();
        }           
        error("Fehler");               
    }
}

 
 

hasField()-Methode

Ich hatte schon des öfteren die Situation, daß ich wissen wollte ob ein Datensatz ein bestimmtes Feld enthält um den jeweiligen Wert verarbeiten zu können. Beispielsweise innerhalb eine Methode, welche die aufrufenden args() verarbeitet.

Beispielsweise stellt die Klasse SysDictTable die Methode hasMethod() zur Verfügung, eine hasField()-Methode aber habe ich bislang nicht gefunden.

Deshalb habe ich mir folgende Logik überlegt:

Common callingRecord;
itemId itemId;
SysDictField itemDictField;

itemDictField = SysDictField::findFieldByName(tableId2name(callingRecord.TableId), identifierStr(itemId));

if(itemDictField)
{
    itemId = callingRecord.(itemDictField.id());
}

Wenn jemand eine elegantere Möglichkeit kennt, nur her damit!


 
 

Erweitern von Dynamics AX um neue Icons

Custom IconsIn Dynamics AX kann man bekanntermaßen Menuitems oder Buttons mit Icons optisch aufwerten. Oft werden dafür die bereits in der Form SysImageRessources anzeigbaren sog. Embedded Resources verwendet.

Es ist allerdings nicht möglich, diese Embedded Ressources um eigene Icons/Bilder zu erweitern.

Dafür stellt AX den AOT-Knoten Resources zur Verfügung.


 
 

Voucher/Beleg in Dynamics AX 2009 prüfen

Vor kurzem musste ich in Dynamics AX 2009 eine Belegnummer (Voucher) per Code auf evtl. vorhandene Duplikate prüfen. Die folgende Methode ist dafür sehr hilfreich:

ledgerParameters::checkDuplicate(_voucher, _date);

 
 
Seiten « 1 2 3 4 5 6 7 8 ... 20 » 

 

 
 
 
Beiträge des aktuellen Monats
April 2024
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
2930 
 
© 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