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.
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
;
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:
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:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
See töötab tegelikult nii, nagu oleksite vormingu stringi otse esitanud.
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));
}