Miklix

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.


Această pagină a fost tradusă automat din limba engleză pentru a o face accesibilă cât mai multor persoane. Din păcate, traducerea automată nu este încă o tehnologie perfecționată, astfel încât pot apărea erori. Dacă preferați, puteți vizualiza versiunea originală în limba engleză aici:

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

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

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:

#define.FormatMacro('%1-%2-%3');
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:

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

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:

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));
}
Distribuie pe BlueskyDistribuie pe FacebookDistribuie pe LinkedInDistribuie pe TumblrDistribuie pe XDistribuie pe LinkedInPin pe Pinterest

Mikkel Bang Christensen

Despre autor

Mikkel Bang Christensen
Mikkel este creatorul și proprietarul miklix.com. El are peste 20 de ani de experiență ca programator de calculatoare/dezvoltator software profesionist și este în prezent angajat cu normă întreagă pentru o mare corporație europeană de IT. Atunci când nu scrie pe blog, își petrece timpul liber cu o gamă largă de interese, hobby-uri și activități, care se pot reflecta într-o anumită măsură în varietatea de subiecte abordate pe acest site.