Miklix

Stringopmaak met macro en strFmt in Dynamics AX 2012

Gepubliceerd: 16 februari 2025 om 00:48:46 UTC
Laatst bijgewerkt: 12 januari 2026 om 08:44:29 UTC

Dit artikel beschrijft een aantal eigenaardige gedragingen in Dynamics AX 2012 bij gebruik van een macro als opmaakreeks in de strFmt, en geeft voorbeelden van hoe dit probleem te omzeilen.


Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

String Formatting with Macro and strFmt in Dynamics AX 2012

De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Deze informatie is mogelijk niet geldig voor andere versies.

Ik stuitte onlangs op een probleem met de strFmt-functie dat me een tijdje perplex maakte. Het meest raadselachtige was dat ik het, door een vreemd toeval, nog nooit eerder was tegengekomen in mijn vele jaren als Axapta/Dynamics AX-ontwikkelaar.

Het probleem was dat ik een macro als opmaakstring voor de strFmt-functie probeerde te gebruiken, maar dat werkte gewoon niet. De %-parameters werden volledig genegeerd en alleen de rest van de string werd geretourneerd.

Na wat onderzoek ontdekte ik dat macro's zelf gebruikt kunnen worden om strings te formatteren, iets wat ik ook nog niet wist. Ach ja, het is altijd leuk om iets nieuws te leren, maar ik was toch wel verbaasd dat ik dit niet eerder was tegengekomen.

In principe zoiets als dit

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

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

Dit werkt niet, omdat de %-tekens in de macro eigenlijk worden gebruikt voor de eigen tekenreeksopmaakfuncties van de macro. In dit geval zal de strFmt-functie de opmaaktekenreeks interpreteren als "--" en daarom alleen dat retourneren.

Zoiets als dit:

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

Het zal werken, maar waarschijnlijk niet zoals je wilt. In plaats van de waarden van de drie variabelen weer te geven, geeft het de namen van de variabelen weer, in dit geval "salesId-itemId-lineNum". (Merk op dat ik geen spaties achter de komma's heb geplaatst bij het doorgeven van parameters aan de macro, zoals ik normaal gesproken doe bij methodeaanroepen. Dat komt omdat de macro die spaties ook gebruikt, waardoor de uitvoer "salesId-itemId-lineNum" zou zijn als ik dat wel had gedaan).

Om een macro daadwerkelijk als opmaakstring te gebruiken met strFmt, moet je de procenttekens escapen met backslashes, zoals dit:

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

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

Dit werkt in feite alsof je de opmaakstring direct had opgegeven.

Dit kleine projectje illustreert de voorbeelden:

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

Verder lezen

Als je dit bericht leuk vond, vind je deze suggesties misschien ook interessant:


Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Christensen

Over de auteur

Mikkel Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.