Miklix

Stringopmaak met macro en strFmt in Dynamics AX 2012

Gepubliceerd: 16 februari 2025 om 00:48:46 UTC

In dit artikel wordt vreemd gedrag in Dynamics AX 2012 beschreven wanneer u een macro gebruikt als opmaakreeks in de strFmt. Ook worden voorbeelden gegeven van hoe u dit kunt 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. Het kan wel of niet geldig zijn voor andere versies.

Ik kwam onlangs een probleem tegen met de strFmt-functie dat me even verbaasde. Het meest verbijsterende was dat ik het door een vreemd toeval nog nooit eerder ben tegengekomen in mijn vele jaren als Axapta/Dynamics AX-ontwikkelaar.

Het probleem was dat ik probeerde een macro te gebruiken als de format string voor de strFmt functie en het werkte gewoon niet. Het negeerde de % parameters volledig en gaf alleen de rest van de string terug.

Nadat ik me erin verdiept had, ontdekte ik dat macro's zelf gebruikt kunnen worden om strings te formatteren, wat ik ook niet wist. Ach, het is altijd goed om iets nieuws te leren, maar ik was toch erg verrast dat ik dit nog niet eerder was tegengekomen.

In principe zoiets als dit

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

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

zal niet werken omdat de % tekens in de macro daadwerkelijk worden gebruikt voor de eigen string-opmaakfuncties van de macro. In dit geval zal de strFmt functie de opmaakstring zien als "--" en zal daarom alleen dat retourneren.

Zoiets als dit:

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

zal werken, maar waarschijnlijk niet op de manier die u wilt. In plaats van de waarden van de drie variabelen uit te voeren, worden in plaats daarvan de namen van de variabelen uitgevoerd, in dit geval "salesId-itemId-lineNum". (Merk op dat ik geen spaties na de komma's heb gezet bij het doorgeven van parameters aan de macro, zoals ik normaal doe bij methodeaanroepen. Dat komt omdat de macro ook daadwerkelijk zulke spaties zal gebruiken, dus de uitvoer zou "salesId-itemId-lineNum" zijn als ik dat deed).

Om een macro daadwerkelijk als opmaakreeks met strFmt te gebruiken, moet u de percentagetekens escapen met backslashes, zoals dit:

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

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

Dit werkt alsof u de opmaakreeks rechtstreeks hebt opgegeven.

Dit kleine klusje 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));
}
Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Bang Christensen

Over de auteur

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