Miklix

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


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

#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 tento.

Niečo takéto:

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

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

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:

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));
}
Zdieľať na BlueskyZdieľať na FacebookuZdieľať na LinkedInZdieľať na TumblrZdieľať na XZdieľať na LinkedInPripnúť na Pintereste

Mikkel Bang Christensen

O autorovi

Mikkel Bang 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.