Miklix

Stringformatierung mit Makro und strFmt in Dynamics AX 2012

Veröffentlicht: 16. Februar 2025 um 00:48:22 UTC
Zuletzt aktualisiert: 12. Januar 2026 um 08:44:22 UTC

Dieser Artikel beschreibt einige Besonderheiten des Verhaltens in Dynamics AX 2012 bei der Verwendung eines Makros als Formatzeichenfolge in strFmt sowie Beispiele, wie man dieses Problem 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. Ob sie auch für andere Versionen gelten, ist ungewiss.

Vor Kurzem stieß ich auf ein Problem mit der strFmt-Funktion, das mich zunächst ratlos machte. Am rätselhaftesten war, dass ich ihr in meinen vielen Jahren als Axapta/Dynamics AX-Entwickler merkwürdigerweise noch nie begegnet war.

Das Problem war, dass ich versucht habe, ein Makro als Formatzeichenkette für die Funktion strFmt zu verwenden, und es hat einfach nicht funktioniert. Die Funktion hat die Prozentzeichen-Parameter komplett ignoriert und nur den Rest der Zeichenkette zurückgegeben.

Nachdem ich mich näher damit befasst hatte, entdeckte ich, dass man Makros selbst zur Formatierung von Zeichenketten verwenden kann, was mir ebenfalls neu war. Nun ja, es ist immer gut, etwas Neues zu lernen, aber ich war trotzdem sehr überrascht, dass mir das vorher nicht aufgefallen war.

Im Prinzip so etwas wie das

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

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

Das funktioniert nicht, da die Prozentzeichen im Makro für die eigene Zeichenkettenformatierung des Makros verwendet werden. In diesem Fall interpretiert die Funktion `strFmt` die Formatierungszeichenkette als "--" und gibt daher nur diese zurück.

Etwa so:

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

Es funktioniert, aber wahrscheinlich nicht so, wie Sie es sich wünschen. Anstatt die Werte der drei Variablen auszugeben, werden deren Namen ausgegeben, in diesem Fall „salesId-itemId-lineNum“. (Beachten Sie, dass ich beim Übergeben der Parameter an das Makro keine Leerzeichen nach den Kommas gesetzt habe, wie ich es normalerweise bei Methodenaufrufen tue. Das Makro verwendet diese Leerzeichen nämlich auch, die Ausgabe wäre dann „salesId-itemId-lineNum“.)

Um ein Makro als Formatierungszeichenfolge mit strFmt zu verwenden, müssen Sie die Prozentzeichen mit Backslashes maskieren, etwa so:

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

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

Das funktioniert genauso, als hätten Sie die Formatzeichenfolge direkt angegeben.

Dieses kleine Beispiel veranschaulicht die Sachlage:

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));
}

Weitere Informationen

Wenn Ihnen dieser Beitrag gefallen hat, könnten Ihnen auch diese Vorschläge gefallen:


Teilen auf BlueskyAuf Facebook teilenAuf LinkedIn teilenAuf Tumblr teilenTeilen auf XAuf LinkedIn teilenPin auf Pinterest

Mikkel Christensen

Über den Autor

Mikkel 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.