Miklix

Strengeformatering med makro og strFmt i Dynamics AX 2012

Publisert: 16. februar 2025 kl. 00:48:45 UTC

Denne artikkelen beskriver noe særegen oppførsel i Dynamics AX 2012 når du bruker en makro som formatstreng i strFmt, samt eksempler på hvordan du kan omgå det.


Denne siden er maskinoversatt fra engelsk for å gjøre den tilgjengelig for så mange som mulig. Dessverre er maskinoversettelse ennå ikke en fullkommen teknologi, så det kan forekomme feil. Hvis du foretrekker det, kan du se den engelske originalversjonen her:

String Formatting with Macro and strFmt in Dynamics AX 2012

Informasjonen i dette innlegget er basert på Dynamics AX 2012 R3. Det kan være eller ikke være gyldig for andre versjoner.

Jeg har nylig støtt på et problem med strFmt-funksjonen som forvirret meg litt. Det mest forvirrende var at jeg ved en merkelig tilfeldighet aldri har møtt det før i mine mange år som Axapta/Dynamics AX-utvikler.

Problemet var at jeg prøvde å bruke en makro som formatstreng for strFmt-funksjonen, og det fungerte bare ikke. Den ignorerte %-parameterne fullstendig og returnerte bare resten av strengen.

Etter å ha sett på det, oppdaget jeg at makroer i seg selv kan brukes til å formatere strenger, noe som også var noe jeg ikke visste. Jaja, det er alltid godt å lære noe nytt, men jeg ble likevel veldig overrasket over at jeg ikke tilfeldigvis hadde vært borti dette før.

I utgangspunktet noe sånt som dette

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

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

vil ikke fungere fordi %-tegnene i makroen faktisk brukes til makroens egne strengformateringsfunksjoner. I dette tilfellet vil strFmt-funksjonen se formateringsstrengen som "--" og vil derfor bare returnere den.

Noe sånt som dette:

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

vil fungere, men sannsynligvis ikke slik du vil ha det. I stedet for å skrive ut verdiene til de tre variablene, vil den sende ut navnene på variablene i stedet, i dette tilfellet "salesId-itemId-lineNum". (Merk at jeg ikke satte mellomrom etter kommaene når jeg sendte parametere til makroen, slik jeg vanligvis gjør i metodekall. Det er fordi makroen faktisk vil bruke slike mellomrom også, så utdataene ville vært "salesId- itemId- lineNum" hvis jeg gjorde det).

For å faktisk bruke en makro som formateringsstreng med strFmt, må du unnslippe prosenttegnene med omvendte skråstreker, slik:

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

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

Dette vil faktisk fungere som om du hadde levert formatstrengen direkte.

Denne lille jobben illustrerer eksemplene:

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å LinkedInFest på Pinterest

Mikkel Bang Christensen

Om forfatteren

Mikkel Bang Christensen
Mikkel er skaperen og eieren av miklix.com. Han har over 20 års erfaring som profesjonell dataprogrammerer/programvareutvikler og er for tiden ansatt på fulltid i et stort europeisk IT-selskap. Når han ikke blogger, bruker han fritiden sin på en lang rekke interesser, hobbyer og aktiviteter, noe som til en viss grad kan gjenspeiles i de mange ulike temaene som dekkes på dette nettstedet.