Miklix

Formatarea șirurilor cu Macro și strFmt în Dynamics AX 2012

Publicat: 16 februarie 2025 la 00:48:53 UTC
Ultima actualizare: 12 ianuarie 2026 la 08:44:31 UTC

Acest articol descrie un comportament particular în Dynamics AX 2012 atunci când se utilizează o macrocomandă ca șir de format în strFmt, precum și exemple despre cum se poate rezolva problema.


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. Este posibil să fie sau nu valabile pentru alte versiuni.

Recent am întâlnit o problemă cu funcția strFmt care m-a derutat puțin. Cel mai derutant lucru a fost că, printr-o coincidență ciudată, nu am mai întâlnit-o niciodată în mulții mei ani de experiență 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 am analizat problema, am descoperit că macrocomenzile pot fi folosite pentru a formata șiruri de caractere, lucru pe care nu-l știam. Ei bine, e întotdeauna bine să înveți ceva nou, dar am fost totuși foarte surprins că nu am mai întâlnit așa ceva î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 folosite pentru funcțiile de formatare a șirurilor proprii macrocomenzii. În acest caz, funcția strFmt va vedea șirul de formatare ca „--” și, prin urmare, va returna doar acesta.

Ceva de genul:

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

Va funcționa, dar probabil nu așa cum doriți. În loc să afișeze valorile celor trei variabile, va afișa numele variabilelor, în acest caz „salesId-itemId-lineNum”. (Observați că nu am pus spații după virgule când am transmis parametrii macro-ului, așa cum fac de obicei în apelurile de metodă. Asta pentru că și macro-ul va folosi astfel de spații, deci rezultatul ar fi „salesId-itemId-lineNum” dacă aș face-o).

Pentru a utiliza efectiv o macrocomandă ca șir de formatare cu strFmt, trebuie să folosiți backslash-uri pentru a elimina semnele procentuale, 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));
}

Lectură suplimentară

Dacă ți-a plăcut această postare, s-ar putea să-ți placă și aceste sugestii:


Distribuie pe BlueskyDistribuie pe FacebookDistribuie pe LinkedInDistribuie pe TumblrDistribuie pe XDistribuie pe LinkedInPin pe Pinterest

Mikkel Christensen

Despre autor

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