Formatarea șirurilor cu Macro și strFmt în Dynamics AX 2012
Publicat: 16 februarie 2025 la 00:48:53 UTC
Acest articol descrie un comportament deosebit în Dynamics AX 2012 atunci când se folosește o macrocomandă ca șir de format în strFmt, precum și exemple despre cum să o rezolvi.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informațiile din această postare se bazează pe Dynamics AX 2012 R3. Poate fi valabil sau nu pentru alte versiuni.
Am întâlnit recent o problemă cu funcția strFmt care m-a derutat puțin. Partea cea mai derutantă a fost că, printr-o coincidență ciudată, nu am mai întâlnit-o până acum în mulți ani de activitate ca dezvoltator Axapta/Dynamics AX.
Problema a fost că am încercat să folosesc o macrocomandă ca șir de format pentru funcția strFmt și pur și simplu nu a funcționat. A ignorat complet parametrii % și a returnat doar restul șirului.
După ce m-am uitat în el, am descoperit că macrocomenzile în sine pot fi folosite pentru a formata șiruri de caractere, ceea ce era, de asemenea, ceva ce nu știam. Ei bine, este întotdeauna bine să înveți ceva nou, dar totuși am fost foarte surprins că nu mi s-a întâmplat să dau peste asta înainte.
Practic, ceva de genul acesta
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
nu va funcționa, deoarece semnele % din macrocomandă sunt de fapt utilizate pentru caracteristicile de formatare a șirurilor de caractere proprii ale macrocomenzii. În acest caz, funcția strFmt va vedea șirul de formatare ca „--” și, prin urmare, va returna doar acela.
Ceva de genul asta:
info(#FormatMacro(salesId,itemId,lineNum));
va funcționa, dar probabil nu așa cum doriți. În loc să scoată valorile celor trei variabile, va scoate numele variabilelor, în acest caz „salesId-itemId-lineNum”. (Rețineți că nu am pus spații după virgule când am trecut parametrii macrocomenzii, așa cum fac de obicei în apelurile de metode. Asta pentru că macro-ul va folosi de fapt și astfel de spații, deci rezultatul ar fi „salesId- itemId-lineNum” dacă aș face-o).
Pentru a utiliza de fapt o macrocomandă ca șir de formatare cu strFmt, trebuie să scăpați de semnele procentuale cu bare oblice inverse, astfel:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Acest lucru va funcționa ca și cum ați fi furnizat direct șirul de format.
Această mică lucrare ilustrează exemplele:
{
#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));
}