Dynamics AX Blog - Seite 44

Fehlerhafte str2con Funktion unter AX2009 II

Im vor kurzem erschienenen Hotfix Rollup 3 für AX 2009 wurde u.a. der, in diesem Artikel beschriebene, Fehler der Funktion str2con korrigiert.

Wer sich nicht gleich die Mühe machen möchte, nur aufgrund dieses Fehlers das gesamte HR einzuspielen, der kann auch nur die Methode in der Klasse Global anpassen: Einfach den Aufruf str2int durch str2int64 ersetzen.


 
 

Erstellen und Buchen eines Umlagerungsjournal in AX 2009

Nachstehend ein Codebeispiel, wie man in Dynamics AX 2009 per X++ ein Umlagerungsjournal erstellen und buchen kann.

static void createAndPostInventJournalTransfer(Args _args)
{
    inventJournalTable  inventJournalTable;
    inventJournalTrans  inventJournalTrans;
    journalCheckPost    journalCheckPost;
    
    itemId              _itemId             = "1000";
    qty                 _qty                = 1;
    inventDimId         _fromInventDimId    = "00000070_069";
    inventDimId         _toInventDimId      = "00000063_069";
    ;

    try
    {
        ttsbegin;

        // Create header
        inventJournalTable.clear();
        inventJournalTable.initValue();

        inventJournalTable.initFromInventJournalName(
            InventJournalName::find(InventJournalName::standardJournalName(InventJournalType::Transfer)));

        inventJournalTable.SystemBlocked    = NoYes::Yes;
        inventJournalTable.BlockUserId      = curUserId();

        inventJournalTable.insert();

        // Create lines
        inventJournalTrans.clear();

        inventJournalTrans.initValue();
        inventJournalTrans.initFromInventJournalTable(inventJournalTable);

        inventJournalTrans.ItemId           = _itemId;
        inventJournalTrans.initFromInventTable(inventTable::find(inventJournalTrans.ItemId));

        inventJournalTrans.Qty              = _qty;

        inventJournalTrans.inventMovement().journalSetCostPrice();

        inventJournalTrans.inventDimId      = _fromInventDimId;
        inventJournalTrans.toinventDimId    = _toInventDimId;

        inventJournalTrans.voucher          = numberSeq::newGetVoucherFromCode(
                                                    InventJournalName::find(inventJournalTable.JournalNameId).VoucherSeqId).voucher();

        inventJournalTrans.insert();

        // Post journal
        journalCheckPost = InventJournalCheckPost::newJournalCheckPost(JournalCheckPostType::Post, inventJournalTable);
        journalCheckPost.run();

        ttscommit;
    }
    catch (Exception::Error)
    {
        throw exception::Error;
    }
}

Mit der einen oder anderen Anpassung sollte es auch möglich sein, Journale anderer Typen auf ähnliche Art & Weise zu erstellen.


 
 

Fehlerhafte str2con Funktion unter AX 2009

Vor fast zwei Jahren habe ich schon einmal über die Funktion/Methode str2con und deren Unzulänglichkeiten in älteren Versionen von Dynamixs AX geschrieben. Leider musste ich vor kurzem feststellen, daß diese Funktion in AX 2009 auch nicht so zuverlässig ist, wie ich sie mir wünschen würde.

Sind nämlich im zu zerteilenden String rein numerische Werte enthalten, die größer oder gleich 2^31 (=2147483648) sind, kann AX diese Werte nicht mehr korrekt verarbeiten.

Nachstehend ein Job, der dieses Fehlverhalten demonstriert:

static void str2conBug(Args _args)
{
    container   con;
    str         myStr;
    int         i;
    ;

    myStr += "Dynamics"                 + ";";
    myStr += "Ax 2009"                  + ";";
    myStr += "str2con"                  + ";";
    myStr += "does"                     + ";";
    myStr += "not work with"            + ";";
    myStr += "numeric values greater"   + ";";
    myStr += "than"                     + ";";
    myStr += "2 ^ 31."                  + ";";
    myStr += "Example:"                 + ";";
    myStr += "2147483648"               + ";"// does not work
    myStr += "(=2^31)"                  + ";";
    myStr += " "                        + ";";
    myStr += "Example:"                 + ";";
    myStr += "5432167890"               + ";"// does not work
    myStr += "(>2^31)";

    con = str2con(myStr, ";");
    for(i=1;i<=conLen(con);i++)
    {
        info(conPeek(con, i));
    }
}

Mir blieb also nichts anderes übrig, als mir einen Ersatz für die Funktion str2con zu schreiben:


 
 

SELECT-Statements in Verbindung mit Maps

Wie man Maps verwenden kann, ist u.a. in der MSDN beschrieben, wie man allerdings Maps in Verbindung mit SELECT-Statements verwendet, steht auch dort nicht beschrieben.

Deshalb im folgenden ein kurzes Beispiel unter Verwendung der Map bankAccountMap.

static void selectFromMap(Args _args)
{
    bankAccountMap     bankAccountMap;

    custBankAccount    custBankAccount;
    vendBankAccount    vendBankAccount;
    ;

    while select bankAccountMap
    {
        info(bankAccountMap.AccountNum);    // Does never occur
    }

    // select records from custBankAccount
    bankAccountMap = custBankAccount.data();
    while select bankAccountMap
    {
        info(bankAccountMap.AccountNum);
    }

    // select records from vendBankAccount
    bankAccountMap = vendBankAccount.data();
    while select bankAccountMap
    {
        info(bankAccountMap.AccountNum);
    }
}

 
 

Laufzeitfehler im Enterprise Portal von Axapta 3.0

Vor kurzem lief mir im Enterprise Portal von Axapta 3.0 folgender Fehler über den Weg (gleich nach dem Login):

Laufzeitfehler in Microsoft VBScript Fehler '800a01a8'

Objekt erforderlich: 'wa'

/ECW_HBA/i_axaptafunctions.asp, line 117


 
 

E-Mails aus Dynamics AX enthalten nur eine Datei namens winmail.dat

Wenn ein Absender Microsoft Outlook oder Outlook-Express verwendet kommt es vor, dass der Empfänger die im Mail enthaltenen Attachements als winmail.dat erhält. Das Problem tritt dann auf wenn der Empfänger keinen Mail-Client von Microsoft verwendet, und der Absender das Mail im "Microsoft Outlook Rich Text Format" (RTF) versendet.

Leider versendet auch Dynamics AX genau in diesem Format, wenn man z.B. einen Report aus AX heraus als PDF einem Empfänger schicken möchte (und selbst auf seinem PC als Mail-Client Outlook verwendet).

Screenshot

Der einzige Workaround für dieses Problem besteht darin, den zu schickenden Report zuerst als PDF zu speichern, und anschließend manuell mit Outlook zu versenden. Der Nachteil dabei ist natürlich der etwas höhere Aufwand, der Vorteil ist daß der Text des Mails angegeben werden kann - auch AX 2009 verwendet immer noch den Fixtext axapta report - und auch eine evtl. vorhandene Standardsignatur verwendet wird.


 
 

Display-Methode mit 2 Datenquellen

Display-Methoden bieten eine einfache Möglichkeit, zum jeweiligen Datensatz zugehörige Daten auch aus anderen Tabellen anzuzeigen.

Was aber macht man, wenn man in einem Formular mit mehreren Datenquellen eine Display-Methode einbinden muss, die auf die gerade im Formular angezeigten Werte zugreifen muss? Hierfür kann man sich der Methoden joinParent() bzw. joinChild() eines Datensatzes bedienen.


 
 
Seiten « 1 ... 41 42 43 44 45 46 47 ... 53 » 

 

 
 
 
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