Miklix

Stringformatierung mit Makro und strFmt in Dynamics AX 2012

Veröffentlicht: 16. Februar 2025 um 00:48:22 UTC

Dieser Artikel beschreibt einige Besonderheiten in Dynamics AX 2012 bei der Verwendung eines Makros als Formatzeichenfolge in strFmt und bietet Beispiele, wie man dieses Verhalten umgehen kann.


Diese Seite wurde maschinell aus dem Englischen übersetzt, um sie so vielen Menschen wie möglich zugänglich zu machen. Leider ist die maschinelle Übersetzung noch keine ausgereifte Technologie, so dass Fehler auftreten können. Wenn Sie es vorziehen, können Sie sich die englische Originalversion hier ansehen:

String Formatting with Macro and strFmt in Dynamics AX 2012

Die Informationen in diesem Beitrag basieren auf Dynamics AX 2012 R3. Sie sind möglicherweise auch für andere Versionen gültig, müssen es aber nicht.

Ich bin vor Kurzem auf ein Problem mit der strFmt-Funktion gestoßen, das mich ein wenig verblüffte. Das Verblüffendste daran war, dass ich es durch einen seltsamen Zufall in meinen vielen Jahren als Axapta/Dynamics AX-Entwickler noch nie zuvor gesehen hatte.

Das Problem war, dass ich versucht habe, ein Makro als Formatzeichenfolge für die Funktion strFmt zu verwenden, und es hat einfach nicht funktioniert. Es hat die %-Parameter völlig ignoriert und nur den Rest der Zeichenfolge zurückgegeben.

Als ich mich damit befasste, entdeckte ich, dass Makros selbst zum Formatieren von Zeichenfolgen verwendet werden können, was ich ebenfalls nicht wusste. Na ja, es ist immer gut, etwas Neues zu lernen, aber ich war trotzdem sehr überrascht, dass ich nicht schon früher darauf gestoßen war.

Im Grunde so etwas

#define.FormatMacro('%1-%2-%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

funktioniert nicht, da die %-Zeichen im Makro eigentlich für die eigenen Zeichenfolgenformatierungsfunktionen des Makros verwendet werden. In diesem Fall sieht die Funktion strFmt die Formatierungszeichenfolge als „--“ und gibt daher nur diese zurück.

Etwa so:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

funktioniert, aber wahrscheinlich nicht so, wie Sie es möchten. Anstatt die Werte der drei Variablen auszugeben, werden stattdessen die Namen der Variablen ausgegeben, in diesem Fall „salesId-itemId-lineNum“. (Beachten Sie, dass ich beim Übergeben von Parametern an das Makro keine Leerzeichen nach den Kommas eingefügt habe, wie ich es normalerweise bei Methodenaufrufen tue. Das liegt daran, dass das Makro tatsächlich auch solche Leerzeichen verwendet, sodass die Ausgabe sonst „salesId- itemId- lineNum“ wäre).

Um ein Makro tatsächlich als Formatierungszeichenfolge mit strFmt zu verwenden, müssen Sie die Prozentzeichen mit Backslashes maskieren, wie folgt:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Dies funktioniert tatsächlich so, als hätten Sie die Formatzeichenfolge direkt angegeben.

Diese kleine Arbeit veranschaulicht die Beispiele:

static void StrFmtMacroTest(Args _args)
{
    #define.FormatMacro('%1-%2-%3')
    #define.FormatMacroEscaped('\\%1-\\%2-\\%3')
    SalesId salesId = '1';
    ItemId  itemId  = '2';
    LineNum lineNum = 3.00;
    ;

    info(#FormatMacro(salesId,itemId,lineNum));
    info(strFmt(#FormatMacro, salesId, itemId, lineNum));
    info(strFmt(#FormatMacroEscaped, salesId, itemId, lineNum));
}
Teilen auf BlueskyAuf Facebook teilenAuf LinkedIn teilenAuf Tumblr teilenTeilen auf XAuf LinkedIn teilenPin auf Pinterest

Mikkel Bang Christensen

Über den Autor

Mikkel Bang Christensen
Mikkel ist der Schöpfer und Eigentümer von miklix.com. Er verfügt über mehr als 20 Jahre Erfahrung als professioneller Computerprogrammierer/Softwareentwickler und ist derzeit in Vollzeit für ein großes europäisches IT-Unternehmen tätig. Wenn er nicht gerade bloggt, verbringt er seine Freizeit mit einer Vielzahl von Interessen, Hobbys und Aktivitäten, was sich bis zu einem gewissen Grad in der Vielfalt der auf dieser Website behandelten Themen widerspiegelt.