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.
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
;
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:
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:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Dette vil faktisk fungere, som om du havde leveret 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));
}