Miklix

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.


Denna sida har maskinöversatts från engelska för att göra den tillgänglig för så många som möjligt. Tyvärr är maskinöversättning ännu inte en fulländad teknik, så fel kan uppstå. Om du föredrar det kan du se den engelska originalversionen här:

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

#define.FormatMacro('%1-%2-%3')
;

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:

#define.FormatMacro('%1-%2-%3');
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:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

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:

static void StrFmtMacroTest(Args _args)
{
    #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:


Dela på BlueskyDela på FacebookDela på LinkedInDela på TumblrDela på XDela på LinkedInFäst på Pinterest

Mikkel Christensen

Om författaren

Mikkel Christensen
Mikkel är skaparen och ägaren av miklix.com. Han har över 20 års erfarenhet som professionell datorprogrammerare/mjukvaruutvecklare och är för närvarande heltidsanställd på ett stort europeiskt IT-bolag. När han inte bloggar ägnar han sin fritid åt en mängd olika intressen, hobbies och aktiviteter, vilket i viss mån kan återspeglas i de olika ämnen som behandlas på den här webbplatsen.