Miklix

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


Táto stránka bola strojovo preložená z angličtiny, aby bola prístupná čo najväčšiemu počtu ľudí. Žiaľ, strojový preklad ešte nie je dokonalá technológia, takže sa môžu vyskytnúť chyby. Ak chcete, môžete si pozrieť pôvodnú anglickú verziu tu:

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

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

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:

#define.FormatMacro('%1-%2-%3');
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:

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

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:

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));
}

Ďalšie čítanie

Ak sa vám tento príspevok páčil, možno sa vám budú páčiť aj tieto návrhy:


Zdieľať na BlueskyZdieľať na FacebookuZdieľať na LinkedInZdieľať na TumblrZdieľať na XZdieľať na LinkedInPripnúť na Pintereste

Mikkel Christensen

O autorovi

Mikkel Christensen
Mikkel je tvorcom a majiteľom miklix.com. Má viac ako 20 rokov skúseností ako profesionálny počítačový programátor/vývojár softvéru a v súčasnosti pracuje na plný úväzok pre veľkú európsku IT korporáciu. Keď práve nepíše blog, venuje svoj voľný čas širokej škále záujmov, koníčkov a aktivít, čo sa môže do istej miery odrážať v rôznorodosti tém na tejto webovej lokalite.