Formátovanie reťazca pomocou makra a strFmt v Dynamics AX 2012
Publikované: 16. februára 2025 o 0:48:55 UTC
Tento článok popisuje niektoré zvláštne správanie v Dynamics AX 2012 pri použití makra ako formátovacieho reťazca v strFmt, ako aj príklady, ako to obísť.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informácie v tomto príspevku sú založené na Dynamics AX 2012 R3. Môže a nemusí platiť pre iné verzie.
Nedávno som sa stretol s problémom s funkciou strFmt, ktorý ma trochu zmiatol. Najmätúcejšie na tom bolo, že som sa s tým nejakou zvláštnou náhodou nikdy predtým nestretol počas mnohých rokov ako vývojár Axapta/Dynamics AX.
Problém bol v tom, že som sa pokúsil použiť makro ako formátovací reťazec pre funkciu strFmt a jednoducho to nefungovalo. Úplne ignoroval parametre % a vrátil iba zvyšok reťazca.
Po preštudovaní som zistil, že makrá sa dajú použiť na formátovanie reťazcov, čo som tiež nevedel. Och, vždy je dobré naučiť sa niečo nové, ale aj tak som bol veľmi prekvapený, že som sa s týmto ešte nestretla.
V podstate niečo takéto
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
nebude fungovať, pretože znaky % v makre sa v skutočnosti používajú pre vlastné funkcie formátovania reťazcov makra. V tomto prípade funkcia strFmt uvidí formátovací reťazec ako "--" a preto vráti iba tento.
Niečo takéto:
info(#FormatMacro(salesId,itemId,lineNum));
bude fungovať, ale pravdepodobne nie tak, ako by ste chceli. Namiesto výstupu hodnôt troch premenných vypíše názvy premenných, v tomto prípade "salesId-itemId-lineNum". (Všimnite si, že pri odovzdávaní parametrov do makra som nedával medzery za čiarky, ako to zvyčajne robím pri volaniach metód. Je to preto, že makro skutočne použije aj takéto medzery, takže ak by som to urobil, výstup by bol „salesId- itemId- lineNum“).
Ak chcete skutočne použiť makro ako formátovací reťazec pomocou strFmt, musíte znaky percenta opustiť spätnými lomkami, ako je tento:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
V skutočnosti to bude fungovať, ako keby ste zadali formátovací reťazec priamo.
Táto malá práca ilustruje príklady:
{
#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));
}