Strengeformatering med makro og strFmt i Dynamics AX 2012
Publisert: 16. februar 2025 kl. 00:48:45 UTC
Sist oppdatert: 13. september 2025 kl. 22:52:55 UTC
Denne artikkelen beskriver noen særegne virkemåter i Dynamics AX 2012 når du bruker en makro som formatstreng i strFmt, i tillegg til eksempler på hvordan du omgår den.
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 gyldig for andre versjoner.
Jeg støtte nylig på et problem med strFmt-funksjonen som forvirret meg litt. Det mest forvirrende var at jeg ved en eller annen merkelig tilfeldighet aldri har opplevd 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 fullstendig %-parameterne og returnerte bare resten av strengen.
Etter å ha sett nærmere på det, oppdaget jeg at makroer i seg selv kan brukes til å formatere strenger, noe jeg heller ikke visste. Vel, 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". (Legg merke til 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ære "salesId- itemId- lineNum" hvis jeg gjorde det).
Hvis du faktisk vil 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 oppgitt 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));
}
Videre lesing
Hvis du likte dette innlegget, kan du også like disse forslagene:
- Dynamics AX 2012 SysOperation Framework Rask oversikt
- Slett en juridisk enhet (selskapskontoer) i Dynamics AX 2012
- Bruke SysExtension Framework for å finne ut hvilken underklasse som skal instansieres i Dynamics AX 2012
