Miklix

Stringformatering met makro en strFmt in Dynamics AX 2012

Gepubliseer: 16 Februarie 2025 om 00:49:45 UTC
Laas opgedateer: 12 Januarie 2026 om 08:44:43 UTC

Hierdie artikel beskryf 'n paar eienaardige gedrag in Dynamics AX 2012 wanneer 'n makro as 'n formaatstring in die strFmt gebruik word, asook voorbeelde van 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 plasing is gebaseer op Dynamics AX 2012 R3. Dit mag dalk geldig wees vir ander weergawes, maar ook nie.

Ek het onlangs 'n probleem met die strFmt-funksie teëgekom wat my 'n bietjie verwar het. Die mees verwarrende deel was dat ek dit deur 'n vreemde toeval nog nooit tevore 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, maar dit het net nie gewerk nie. Dit het die %-parameters heeltemal geïgnoreer en slegs die res van die string teruggegee.

Nadat ek dit ondersoek het, het ek ontdek dat makro's self gebruik kan word om stringe te formateer, wat ook iets was wat ek nie geweet het nie. Ag wel, dis altyd goed om iets nuuts te leer, maar ek was steeds baie verbaas dat ek dit nie voorheen teëgekom het nie.

Basies, iets soos hierdie

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

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

Sal nie werk nie, want die %-tekens in die makro word eintlik vir die makro se eie stringformateringskenmerke gebruik. In hierdie geval sal die strFmt-funksie die formateringsstring as "--" sien en sal dus slegs dit 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 deurgegee het nie, soos ek gewoonlik in metode-oproepe doen. Dit is omdat die makro eintlik ook sulke spasies sal gebruik, so die uitvoer sal "salesId-itemId-lineNum" wees as ek dit doen).

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

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

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

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

Hierdie klein werkie 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));
}

Verdere Leeswerk

As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:


Deel op BlueskyDeel op FacebookDeel op LinkedInDeel op TumblrDeel op XDeel op LinkedInSpeld op Pinterest

Mikkel Christensen

Oor die skrywer

Mikkel 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.