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.
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
;
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:
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:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Dette vil faktisk fungere som om du hadde levert formatstrengen direkte.
Denne lille jobben illustrerer eksemplene:
{
#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));
}