String Formatting with Macro and strFmt in Dynamics AX 2012
Objavljeno: 16. februar 2025. u 00:51:17 UTC
Ovaj članak opisuje neka neobična ponašanja u Dynamics AX 2012 kada se koristi makro kao string formata u strFmt, kao i primjere kako ga zaobići.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informacije u ovom postu su zasnovane na Dynamics AX 2012 R3. Može ili ne mora vrijediti za druge verzije.
Nedavno sam naišao na problem sa funkcijom strFmt koja me je malo zbunila. Najviše zbunjujuće je bilo to što se nekim čudnim slučajem nikada prije nisam susreo s njim u svojim godinama kao Axapta/Dynamics AX programer.
Problem je bio u tome što sam pokušao da koristim makro kao string formata za strFmt funkciju i to jednostavno nije uspelo. Potpuno je ignorisao % parametre i vratio samo ostatak stringa.
Nakon što sam to pogledao, otkrio sam da se sami makroi mogu koristiti za formatiranje nizova, što je također nešto što nisam znao. Oh dobro, uvijek je dobro naučiti nešto novo, ali sam ipak bio vrlo iznenađen da nisam slučajno naišao na ovo prije.
U osnovi, ovako nešto
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
neće raditi jer se znakovi % u makrou zapravo koriste za makra vlastite mogućnosti formatiranja nizova. U ovom slučaju, funkcija strFmt će vidjeti string za formatiranje kao "--" i stoga će vratiti samo to.
Nešto ovako:
info(#FormatMacro(salesId,itemId,lineNum));
će raditi, ali vjerojatno ne onako kako želite. Umjesto da ispisuje vrijednosti tri varijable, umjesto toga će se prikazati imena varijabli, u ovom slučaju "salesId-itemId-lineNum". (Primijetite da nisam stavljao razmake iza zareza prilikom prosljeđivanja parametara makrou, kao što to obično radim u pozivima metoda. To je zato što će makro zapravo koristiti i takve razmake, tako da bi izlaz bio "salesId- itemId- lineNum" ako to učinim).
Da biste zapravo koristili makro kao string za formatiranje sa strFmt, morate pobjeći od znakova procenta sa obrnutim kosama crtama, kao što je ova:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ovo će zapravo raditi kao da ste direktno dali string 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));
}