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.
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
;
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:
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:
;
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:
{
#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));
}