Miklix

Stringi vormindamine makro ja strFmt abil rakenduses Dynamics AX 2012

Avaldatud: 16. veebruar 2025, kell 00:48:24 UTC

Selles artiklis kirjeldatakse mõnda omapärast käitumist Dynamics AX-i 2012-s, kui kasutate strFmt-s vormingustringina makrot, ja näiteid, kuidas sellest ümber töötada.


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

Selles postituses olev teave põhineb Dynamics AX-i 2012 R3-l. See võib teiste versioonide jaoks kehtida, kuid ei pruugi kehtida.

Hiljuti tekkis probleem strFmt funktsiooniga, mis mind natuke hämmeldas. Kõige hämmastavam osa oli see, et mõne imeliku kokkusattumusega pole ma oma paljude aastate jooksul Axapta/Dynamics AX-i arendajana kunagi varem sellega kokku puutunud.

Probleem seisnes selles, et proovisin kasutada strFmt funktsiooni vormingustringina makrot ja see lihtsalt ei töötanud. See ignoreeris täielikult % parameetreid ja tagastas ainult ülejäänud stringi.

Pärast seda uurides avastasin, et makrosid endid saab kasutada stringide vormindamiseks, mida ma samuti ei teadnud. Ahjaa, alati on hea midagi uut õppida, aga ma olin ikka väga üllatunud, et ma polnud sellega varem kokku puutunud.

Põhimõtteliselt midagi sellist

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

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

ei tööta, sest makro % märke kasutatakse tegelikult makro enda stringivormingu funktsioonide jaoks. Sel juhul näeb strFmt funktsioon vormingustringi "--" ja tagastab seetõttu ainult selle.

Midagi sellist:

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

töötab, kuid tõenäoliselt mitte nii, nagu soovite. Kolme muutuja väärtuste väljastamise asemel väljastab see muutujate nimed , antud juhul "salesId-itemId-lineNum". (Pange tähele, et ma ei pannud makrole parameetrite edastamisel komade järele tühikuid, nagu ma tavaliselt meetodikutsete puhul teen. Seda seetõttu, et makro kasutab tegelikult ka selliseid tühikuid, seega oleks väljundiks "salesId- itemId-lineNum", kui ma seda teeksin).

Selleks, et kasutada makrot strFmt-ga vormindamisstringina, peate protsendimärkide eest kaldkriipsudega põgenema, näiteks järgmiselt:

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

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

See töötab tegelikult nii, nagu oleksite vormingu stringi otse esitanud.

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));
}
Jagage Bluesky'sJaga FacebookisJagage LinkedInisJaga TumblrisJaga X-isJagage LinkedInisKinnitage Pinterestis

Mikkel Bang Christensen

Autorist

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