Miklix

Stringi vormindamine makro ja strFmt abil rakenduses Dynamics AX 2012

Avaldatud: 16. veebruar 2025, kell 00:48:24 UTC
Viimati uuendatud: 12. jaanuar 2026, kell 08:44:24 UTC

See artikkel kirjeldab Dynamics AX 2012 omapärast käitumist makro kasutamisel strFmt-is vormingusstringina ning toob näiteid, kuidas sellest mööda hiilida.


See lehekülg on inglise keelest masintõlgitud, et muuta see võimalikult paljudele inimestele kättesaadavaks. Kahjuks ei ole masintõlge veel täiuslik tehnoloogia, mistõttu võivad esineda vead. Kui soovite, võite vaadata ingliskeelset originaalversiooni siin:

String Formatting with Macro and strFmt in Dynamics AX 2012

Selle postituse teave põhineb Dynamics AX 2012 R3-l. See ei pruugi kehtida teiste versioonide puhul.

Hiljuti kohtasin strFmt funktsiooniga probleemi, mis mind natukeseks hämmeldas. Kõige hämmastavam oli see, et mingil kummalisel kokkusattumusel polnud ma oma paljude aastate jooksul Axapta/Dynamics AX arendajana sellega varem kokku puutunud.

Probleem oli selles, et proovisin funktsiooni strFmt vormingusstringina kasutada makrot, aga see lihtsalt ei toiminud. See ignoreeris täielikult % parameetreid ja tagastas ainult ülejäänud stringi.

Pärast selle uurimist avastasin, et makrosid saab ise stringide vormindamiseks kasutada, mis oli samuti midagi, mida ma ei teadnud. Noh, alati on hea midagi uut õppida, aga ma olin ikkagi väga üllatunud, et ma polnud selle peale varem juhtunud.

Põhimõtteliselt midagi sellist

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

Ei tööta, kuna makro %-märke kasutatakse tegelikult makro enda stringi vormindamise funktsioonide jaoks. Sellisel juhul näeb funktsioon strFmt vormindusstringi kui "--" ja tagastab seetõttu ainult selle.

Midagi sellist:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

Töötab, aga ilmselt mitte nii, nagu sa tahad. Kolme muutuja väärtuste väljastamise asemel väljastab see hoopis muutujate nimed, antud juhul "salesId-itemId-lineNum". (Pange tähele, et ma ei pannud makrole parameetrite edastamisel koma järele tühikuid, nagu ma tavaliselt meetodikõnedes teen. Seda seetõttu, et makro kasutab tegelikult ka selliseid tühikuid, seega oleks väljund "salesId-itemId-lineNum", kui ma seda teeksin).

Makro strFmt-ga vormindusstringina kasutamiseks peate protsendimärgid kaldkriipsudega asendama, näiteks nii:

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

See toimib tegelikult nii, nagu oleksid vormingustringi otse sisestanud.

See väike töö illustreerib näiteid:

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

Lisalugemist

Kui see postitus teile meeldis, võivad teile meeldida ka need soovitused:


Jagage Bluesky'sJaga FacebookisJagage LinkedInisJaga TumblrisJaga X-isJagage LinkedInisKinnitage Pinterestis

Mikkel Christensen

Autorist

Mikkel Christensen
Mikkel on miklix.com looja ja omanik. Tal on üle 20 aasta kogemust professionaalse programmeerija/tarkvaraarendajana ning praegu töötab ta täiskohaga suures Euroopa IT-ettevõttes. Kui ta ei kirjuta blogi, veedab ta oma vaba aega mitmesuguste huvide, hobide ja tegevustega, mis võib mingil määral kajastuda sellel veebisaidil käsitletavate teemade mitmekesisuses.