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.
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
;
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:
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:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Dit sal eintlik werk asof u die formaatstring direk verskaf het.
Hierdie klein werkjie illustreer die voorbeelde:
{
#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));
}