Miklix

Strengformatering med makro og strFmt i Dynamics AX 2012

Udgivet: 16. februar 2025 kl. 00.48.20 UTC
Sidst opdateret: 12. januar 2026 kl. 08.44.21 UTC

Denne artikel beskriver nogle særlige problemer i Dynamics AX 2012, når en makro bruges som formatstreng i strFmt, samt eksempler på, hvordan man omgår det.


Denne side er blevet maskinoversat fra engelsk for at gøre den tilgængelig for så mange mennesker som muligt. Desværre er maskinoversættelse endnu ikke en perfekt teknologi, så der kan forekomme fejl. Hvis du foretrækker det, kan du se den originale engelske version her:

String Formatting with Macro and strFmt in Dynamics AX 2012

Oplysningerne i dette indlæg er baseret på Dynamics AX 2012 R3. De er muligvis ikke gyldige for andre versioner.

Jeg stødte for nylig på et problem med strFmt-funktionen, som forvirrede mig lidt. Det mest forvirrende var, at jeg ved et mærkeligt tilfælde aldrig har stødt på det før i mine mange år som Axapta/Dynamics AX-udvikler.

Problemet var, at jeg prøvede at bruge en makro som formatstreng for strFmt-funktionen, og det virkede bare ikke. Den ignorerede fuldstændigt %-parametrene og returnerede kun resten af strengen.

Efter at have undersøgt det, opdagede jeg, at makroer i sig selv kan bruges til at formatere strenge, hvilket jeg heller ikke vidste. Nå, det er altid godt at lære noget nyt, men jeg var stadig meget overrasket over, at jeg ikke tilfældigvis var stødt på dette før.

Dybest set noget i retning af dette

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

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

Vil ikke fungere, fordi %-tegnene i makroen faktisk bruges til makroens egne strengformateringsfunktioner. I dette tilfælde vil strFmt-funktionen se formateringsstrengen som "--" og vil derfor kun returnere den.

Noget i retning af dette:

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

Vil fungere, men sandsynligvis ikke på den måde, du ønsker. I stedet for at udskrive værdierne for de tre variabler, vil den i stedet udskrive navnene på variablerne, i dette tilfælde "salesId-itemId-lineNum". (Bemærk, at jeg ikke satte mellemrum efter kommaerne, da jeg sendte parametre til makroen, som jeg normalt gør i metodekald. Det skyldes, at makroen faktisk også vil bruge sådanne mellemrum, så outputtet ville være "salesId-itemId-lineNum", hvis jeg gjorde det).

For rent faktisk at bruge en makro som formateringsstreng med strFmt, skal du bruge omvendte skråstreger til at omgå procenttegnene, sådan her:

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

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

Dette vil faktisk fungere, som om du havde angivet formatstrengen direkte.

Dette lille job illustrerer eksemplerne:

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

Yderligere læsning

Hvis du kunne lide dette indlæg, kan du måske også lide disse forslag:


Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFastgør på Pinterest

Mikkel Christensen

Om forfatteren

Mikkel Christensen
Mikkel er skaberen og ejeren af miklix.com. Han har over 20 års erfaring som professionel computerprogrammør/softwareudvikler og er i øjeblikket fuldtidsansat i en stor europæisk IT-virksomhed. Når han ikke blogger, bruger han sin fritid på en lang række interesser, hobbyer og aktiviteter, som i et vist omfang afspejles i de mange forskellige emner, der dækkes på dette websted.