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.
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
;
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:
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:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Dette vil faktisk fungere, som om du havde angivet formatstrengen direkte.
Dette lille job illustrerer eksemplerne:
{
#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:
- Sådan itereres over elementerne i en enum fra X++-kode i Dynamics AX 2012
- Ringer til AIF Document Services direkte fra X++ i Dynamics AX 2012
- Dynamics AX 2012 SysOperation Framework Hurtigt overblik
