Miklix

Stringformatering met makro en strFmt in Dynamics AX 2012

Gepubliseer: 16 Februarie 2025 om 00:49:45 UTC

Hierdie artikel beskryf 'n paar eienaardige gedrag in Dynamics AX 2012 wanneer 'n makro as formaatstring in die strFmt gebruik word, asook voorbeelde oor hoe om dit te omseil.


Hierdie bladsy is masjienvertaal uit Engels om dit vir soveel mense moontlik toeganklik te maak. Ongelukkig is masjienvertaling nog nie 'n volmaakte tegnologie nie, dus kan foute voorkom. As jy verkies, kan jy die oorspronklike Engelse weergawe hier sien:

String Formatting with Macro and strFmt in Dynamics AX 2012

Die inligting in hierdie pos is gebaseer op Dynamics AX 2012 R3. Dit mag al dan nie geldig wees vir ander weergawes nie.

Ek het onlangs 'n probleem met die strFmt-funksie ondervind wat my 'n bietjie verbaas het. Die mees verbysterende deel was dat ek dit deur een of ander vreemde toeval nog nooit teëgekom het in my jare as 'n Axapta/Dynamics AX-ontwikkelaar nie.

Die probleem was dat ek probeer het om 'n makro as die formaatstring vir die strFmt-funksie te gebruik, en dit het net nie gewerk nie. Dit het die % parameters heeltemal geïgnoreer en slegs die res van die string teruggegee.

Nadat ek daarna gekyk het, het ek ontdek dat makro's self gebruik kan word om snare te formateer, wat ook iets was wat ek nie geweet het nie. Tog, dit is altyd goed om iets nuuts te leer, maar ek was steeds baie verbaas dat ek dit nog nie voorheen teëgekom het nie.

Basies so iets

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

sal nie werk nie, want die %-tekens in die makro word eintlik gebruik vir die makro se eie stringformateringsfunksies. In hierdie geval sal die strFmt-funksie die formateringsstring as "--" sien en dit dus net teruggee.

Iets soos hierdie:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

sal werk, maar waarskynlik nie soos jy dit wil hê nie. In plaas daarvan om die waardes van die drie veranderlikes uit te voer, sal dit eerder die name van die veranderlikes uitvoer, in hierdie geval "salesId-itemId-lineNum". (Let op dat ek nie spasies na die kommas geplaas het toe ek parameters aan die makro oorgedra het nie, soos ek gewoonlik in metode-oproepe doen. Dit is omdat die makro eintlik ook sulke spasies sal gebruik, so die uitvoer sou "salesId- itemId- lineNum" wees as ek dit gedoen het).

Om 'n makro as formateringsstring met strFmt te gebruik, moet u die persentasietekens met skuinsstrepe ontsnap, soos volg:

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Dit sal eintlik werk asof u die formaatstring direk verskaf het.

Hierdie klein werkjie illustreer die voorbeelde:

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));
}
Deel op BlueskyDeel op FacebookDeel op LinkedInDeel op TumblrDeel op XDeel op LinkedInSpeld op Pinterest

Mikkel Bang Christensen

Oor die skrywer

Mikkel Bang Christensen
Mikkel is die skepper en eienaar van miklix.com. Hy het meer as 20 jaar ondervinding as 'n professionele rekenaarprogrammeerder/sagteware-ontwikkelaar en is tans voltyds in diens van 'n groot Europese IT-korporasie. Wanneer hy nie blog nie, spandeer hy sy vrye tyd aan 'n groot verskeidenheid belangstellings, stokperdjies en aktiwiteite, wat tot 'n mate weerspieël kan word in die verskeidenheid onderwerpe wat op hierdie webwerf gedek word.