Formátovanie reťazca pomocou makra a strFmt v Dynamics AX 2012
Publikované: 16. februára 2025 o 0:48:55 UTC
Posledná aktualizácia: 12. januára 2026 o 8:44:32 UTC
Tento článok popisuje niektoré zvláštne správanie v systéme Dynamics AX 2012 pri použití makra ako formátovacieho reťazca v strFmt, ako aj príklady, ako ho obísť.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informácie v tomto príspevku sú založené na systéme Dynamics AX 2012 R3. Môžu, ale nemusia byť platné aj pre iné verzie.
Nedávno som narazil na problém s funkciou strFmt, ktorý ma trochu zmiatol. Najviac ma zmiatlo, že som sa s ňou akousi zvláštnou náhodou počas mojich mnohých rokov ako vývojár Axapta/Dynamics AX nikdy predtým nestretol.
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 ignorovalo parametre % a vrátilo iba zvyšok reťazca.
Po preskúmaní som zistil, že samotné makrá sa dajú použiť na formátovanie reťazcov, čo som tiež nevedel. No dobre, vždy je dobré naučiť sa niečo nové, ale aj tak ma veľmi prekvapilo, že som sa na to predtým náhodou nestretol.
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 túto hodnotu.
Niečo takéto:
info(#FormatMacro(salesId,itemId,lineNum));
Bude to fungovať, ale pravdepodobne nie tak, ako chcete. Namiesto výstupu hodnôt troch premenných sa vypíšu názvy premenných, v tomto prípade „salesId-itemId-lineNum“. (Všimnite si, že pri odovzdávaní parametrov makru som za čiarky nevložil medzery, ako to zvyčajne robím pri volaniach metód. Je to preto, že makro takéto medzery tiež použije, takže výstup by bol „salesId-itemId-lineNum“, ak by som ich použil).
Ak chcete makro skutočne použiť ako formátovací reťazec s funkciou strFmt, musíte znaky percenta uniknúť spätnými lomkami, takto:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Toto bude v skutočnosti fungovať, akoby ste formátovací reťazec zadali priamo.
Táto malá úloha 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));
}
Ďalšie čítanie
Ak sa vám tento príspevok páčil, možno sa vám budú páčiť aj tieto návrhy:
- Použitie rámca SysExtension na zistenie, ktorá podtrieda sa má vytvoriť v Dynamics AX 2012
- Rýchly prehľad Dynamics AX 2012 SysOperation Framework
- Volanie dokumentových služieb AIF priamo z X++ v Dynamics AX 2012
