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.
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
;
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:
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:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
See toimib tegelikult nii, nagu oleksid vormingustringi otse sisestanud.
See väike töö illustreerib näiteid:
{
#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:
- Kustutage Dynamics AX-i 2012 juriidiline isik (ettevõtte kontod).
- Viga "Andmelepingu objekti jaoks pole metaandmete klass määratletud" rakenduses Dynamics AX 2012
- Kuidas itereerida X++ koodi enumi elemente rakenduses Dynamics AX 2012
