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.
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
;
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:
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:
;
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));
}
Lectură suplimentară
Dacă ți-a plăcut această postare, s-ar putea să-ți placă și aceste sugestii:
- Ștergeți o entitate juridică (conturi de companie) în Dynamics AX 2012
- Eroare „Nici o clasă de metadate definită pentru obiectul contractului de date” în Dynamics AX 2012
- Convertiți un real în șir cu toate zecimale în Dynamics AX 2012
