Oblikovanje niza s makronaredbom i strFmt u Dynamics AX 2012
Objavljeno: 16. veljače 2025. u 00:51:20 UTC
Ovaj članak opisuje neka neobična ponašanja u programu Dynamics AX 2012 kada se koristi makronaredba kao niz formata u strFmt, kao i primjere kako to zaobići.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informacije u ovom postu temelje se na Dynamics AX 2012 R3. Može, ali i ne mora vrijediti za druge verzije.
Nedavno sam naišao na problem s funkcijom strFmt koji me malo zbunio. Ono što je najviše zbunjivalo bilo je to što se nekom čudnom slučajnošću nikada prije nisam susreo s tim u godinama koje sam proveo kao Axapta/Dynamics AX programer.
Problem je bio u tome što sam pokušao upotrijebiti makronaredbu kao niz formata za funkciju strFmt i jednostavno nije išlo. Potpuno je zanemario parametre % i vratio samo ostatak niza.
Nakon što sam to istražio, otkrio sam da se same makronaredbe mogu koristiti za formatiranje nizova, što također nisam znao. Ma dobro, uvijek je dobro naučiti nešto novo, ali svejedno sam bio jako iznenađen što nisam slučajno naišao na ovo prije.
Uglavnom, ovako nešto
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
neće raditi jer se znakovi % u makronaredbi zapravo koriste za vlastite značajke oblikovanja niza makronaredbe. U ovom slučaju, funkcija strFmt će niz za oblikovanje vidjeti kao "--" i stoga će vratiti samo to.
Nešto ovako:
info(#FormatMacro(salesId,itemId,lineNum));
radit će, ali vjerojatno ne onako kako biste željeli. Umjesto ispisivanja vrijednosti triju varijabli, ispisat će imena varijabli umjesto toga, u ovom slučaju "salesId-itemId-lineNum". (Primijetite da nisam stavio razmake iza zareza prilikom prosljeđivanja parametara u makronaredbu, kao što obično radim u pozivima metoda. To je zato što će makronaredba također koristiti takve razmake, tako da bi izlaz bio "salesId-itemId-lineNum" da jesam).
Da biste stvarno koristili makronaredbu kao niz za oblikovanje sa strFmt, trebate izbjeći znakove postotka obrnutim kosim crtama, ovako:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ovo će zapravo funkcionirati kao da ste izravno unijeli niz formata.
Ovaj mali posao ilustrira primjere:
{
#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));
}