Miklix

Strengformatering med makro og strFmt i Dynamics AX 2012

Udgivet: 16. februar 2025 kl. 00.48.20 UTC

Denne artikel beskriver noget ejendommelig adfærd i Dynamics AX 2012, når du bruger en makro som formatstreng i strFmt, samt eksempler på, hvordan du kan omgå 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. Det er muligvis ikke gyldigt for andre versioner.

Jeg stødte for nylig på et problem med strFmt-funktionen, der forbløffede mig lidt. Det mest forvirrende var, at jeg ved et eller andet underligt 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 formatstrengen for strFmt-funktionen, og det virkede bare ikke. Det 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 også var noget, jeg ikke vidste. Nå ja, 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å det her før.

Dybest set noget som 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 det.

Noget som dette:

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

vil fungere, men sandsynligvis ikke som du ønsker det. I stedet for at udlæse værdierne af de tre variable, vil den udlæse navnene på variablerne i stedet, i dette tilfælde "salesId-itemId-lineNum". (Bemærk, at jeg ikke satte mellemrum efter kommaerne, da jeg sendte parametre til makroen, som jeg plejer i metodekald. Det er fordi 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 undslippe procenttegnene med omvendte skråstreg, sådan her:

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

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

Dette vil faktisk fungere, som om du havde leveret 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));
}
Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFastgør på Pinterest

Mikkel Bang Christensen

Om forfatteren

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