Strängformatering med makro och strFmt i Dynamics AX 2012
Publicerad: 16 februari 2025 kl. 00:48:57 UTC
Senast uppdaterad: 12 januari 2026 kl. 08:44:33 UTC
Den här artikeln beskriver några speciella beteenden i Dynamics AX 2012 när man använder ett makro som formatsträng i strFmt, samt exempel på hur man kan kringgå det.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informationen i det här inlägget är baserad på Dynamics AX 2012 R3. Den kan vara giltig för andra versioner, men inte nödvändigtvis.
Jag stötte nyligen på ett problem med strFmt-funktionen som förbryllade mig lite. Det mest förbryllande var att jag av någon konstig slump aldrig har stött på det förut under mina många år som Axapta/Dynamics AX-utvecklare.
Problemet var att jag försökte använda ett makro som formatsträng för strFmt-funktionen, men det fungerade helt enkelt inte. Det ignorerade %-parametrarna helt och returnerade bara resten av strängen.
Efter att ha undersökt det upptäckte jag att makron i sig kan användas för att formatera strängar, vilket jag inte heller visste. Nåväl, det är alltid bra att lära sig något nytt, men jag blev ändå väldigt förvånad över att jag inte råkat stöta på detta förut.
I grund och botten något liknande detta
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Fungerar inte eftersom %-tecknen i makrot faktiskt används för makrots egna strängformateringsfunktioner. I det här fallet kommer strFmt-funktionen att se formateringssträngen som "--" och returnerar därför bara den.
Något liknande:
info(#FormatMacro(salesId,itemId,lineNum));
Kommer att fungera, men förmodligen inte på det sätt du vill. Istället för att mata ut värdena för de tre variablerna kommer den att mata ut namnen på variablerna istället, i det här fallet "salesId-itemId-lineNum". (Observera att jag inte satte mellanslag efter kommatecken när jag skickade parametrar till makrot, som jag vanligtvis gör i metodanrop. Det beror på att makrot faktiskt också kommer att använda sådana mellanslag, så utdata skulle vara "salesId-itemId-lineNum" om jag gjorde det).
För att faktiskt använda ett makro som formateringssträng med strFmt måste du använda omvända snedstreck för procenttecknen, så här:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Detta kommer faktiskt att fungera som om du hade angett formatsträngen direkt.
Det här lilla arbetet illustrerar exemplen:
{
#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));
}
Vidare läsning
Om du gillade det här inlägget kanske du också gillar dessa förslag:
- Ringer AIF Document Services direkt från X++ i Dynamics AX 2012
- Identifiera dokumentklass och fråga för AIF-tjänst i Dynamics AX 2012
- Dynamics AX 2012 SysOperation Framework Snabböversikt
