String formatiranje sa makro i strFmt u Dinamics AKS KSNUMKS
Objavio: 19. mart 2025. 21:33:11 UTC
Ovaj članak opisuje neko čudno ponašanje u Dinamics AKS 2012 kada se koristi makro kao string formata u strFmt, kao i primere o tome kako ga zaobići.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informacije u ovom postu zasnovane su na Dynamics AX 2012 R3. Moguće je da nisu validne za druge verzije.
Nedavno sam naišao na problem sa funkcijom strFmt koja me na trenutak zbunila. Najzbunjujući deo je bio to što sam, uz neku čudnu slučajnost, nikada ranije nisam naišao na njega tokom svojih mnogobrojnih godina rada kao Axapta/Dynamics AX developer.
Problem je bio što sam pokušao da koristim makro kao format string za funkciju strFmt i to jednostavno nije funkcionisalo. Potpuno je ignorisalo % parametre i samo je vratilo ostatak stringa.
Posle istraživanja, otkrio sam da se makroi sami mogu koristiti za formatiranje stringova, što je takođe nešto što nisam znao. Pa dobro, uvek je dobro naučiti nešto novo, ali sam i dalje bio veoma iznenađen što nisam ranije naišao na ovo.
U suštini, nešto ovako
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
neće raditi jer se % simboli u makrou zapravo koriste za vlastite funkcije formatiranja stringa makroa. U ovom slučaju, funkcija strFmt će videti formatiranje stringa kao "--" i stoga će vratiti samo to.
Nešto ovako:
info(#FormatMacro(salesId,itemId,lineNum));
će raditi, ali verovatno ne onako kako biste želeli. Umesto da izlaz bude vrednosti tri varijable, izlaz će biti imena varijabli, u ovom slučaju "salesId-itemId-lineNum". (Primećujete da nisam stavio razmake nakon zareza prilikom prosleđivanja parametara makrou, kao što obično radim u pozivima metoda. To je zato što makro zapravo koristi takve razmake, pa bi izlaz bio "salesId- itemId- lineNum" da sam ih stavio).
Da biste zapravo koristili makro kao formatiranje stringa sa strFmt, morate da escape-ujete procentne znakove pomoću backslash-a, ovako:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ovo će zapravo raditi kao da ste direktno prosledili format string.
Ovaj mali posao ilustruje primere:
{
#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));
}