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.
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
;
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:
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:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Dit sal eintlik werk asof jy die formaatstring direk verskaf het.
Hierdie klein werkie 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));
}
Verdere Leeswerk
As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:
- Die verskil tussen data () en buf2Buf () in Dynamics AX 2012
- Gebruik die SysExtension-raamwerk om uit te vind watter subklas in Dynamics AX 2012 geïnstalleer moet word
- Identifisering van dokumentklas en navraag vir AIF-diens in Dynamics AX 2012
