Oblikovanje nizov z makri in strFmt v Dynamics AX 2012
Objavljeno: 16. februar 2025 ob 12:48:56 dop. UTC
Ta članek opisuje nekaj nenavadnega vedenja v Dynamics AX 2012 pri uporabi makra kot formatnega niza v strFmt, kot tudi primere, kako se temu izogniti.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informacije v tej objavi temeljijo na Dynamics AX 2012 R3. Lahko velja ali ne velja za druge različice.
Nedavno sem naletel na težavo s funkcijo strFmt, ki me je nekoliko zmedla. Najbolj zmedeno je bilo to, da ga po nekem čudnem naključju še nikoli nisem srečal v svojih mnogih letih kot razvijalec Axapta/Dynamics AX.
Težava je bila v tem, da sem poskušal uporabiti makro kot formatni niz za funkcijo strFmt in enostavno ni delovalo. Popolnoma je prezrl parametre % in vrnil samo preostanek niza.
Ko sem ga preučil, sem odkril, da je mogoče same makre uporabiti za oblikovanje nizov, česar pa prav tako nisem vedel. Oh, vedno se je dobro naučiti nekaj novega, a vseeno sem bil zelo presenečen, da nisem slučajno naletel na to že prej.
V bistvu nekaj takega
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
ne bo delovalo, ker se znaki % v makru dejansko uporabljajo za lastne funkcije oblikovanja niza makra. V tem primeru bo funkcija strFmt niz za oblikovanje videla kot "--" in bo zato vrnila samo to.
Nekaj takega:
info(#FormatMacro(salesId,itemId,lineNum));
bo delovalo, vendar verjetno ne tako, kot bi želeli. Namesto da bi izpisal vrednosti treh spremenljivk, bo namesto tega izpisal imena spremenljivk, v tem primeru "salesId-itemId-lineNum". (Opazite, da pri posredovanju parametrov makru nisem dodal presledkov za vejicami, kot to običajno počnem pri klicih metode. To je zato, ker bo makro dejansko uporabil tudi takšne presledke, tako da bi bil rezultat "salesId-itemId-lineNum", če bi to storil).
Če želite dejansko uporabiti makro kot niz za oblikovanje s strFmt, morate odstotne znake ubežati s poševnicami nazaj, kot je ta:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
To bo dejansko delovalo, kot če bi neposredno vnesli formatni niz.
Ta majhna naloga ponazarja 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));
}