Oblikovanje nizov z makri in strFmt v Dynamics AX 2012
Objavljeno: 16. februar 2025 ob 12:48:56 dop. UTC
Nazadnje posodobljeno: 12. januar 2026 ob 8:44:32 dop. UTC
Ta članek opisuje nekaj nenavadnega vedenja v programu Dynamics AX 2012 pri uporabi makra kot formatnega niza v strFmt, ter primere, kako to obiti.
String Formatting with Macro and strFmt in Dynamics AX 2012
Informacije v tej objavi temeljijo na programu Dynamics AX 2012 R3. Morda veljajo za druge različice, morda pa tudi ne.
Pred kratkim sem naletel na težavo s funkcijo strFmt, ki me je nekoliko begala. Najbolj begajoče pa je bilo to, da po nekem čudnem naključju v svojih mnogih letih kot razvijalec Axapta/Dynamics AX še nikoli nisem naletel nanjo.
Težava je bila v tem, da sem poskušal uporabiti makro kot formatni niz za funkcijo strFmt in preprosto ni delovalo. Popolnoma je prezrlo parametre % in vrnilo le preostanek niza.
Po pregledu sem odkril, da se lahko makri sami uporabljajo za oblikovanje nizov, česar tudi prej nisem vedel. No, vedno se je dobro naučiti kaj novega, ampak vseeno sem bil zelo presenečen, da na to nisem naletel že prej.
V bistvu nekaj takega
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Ne bo delovalo, ker se znaki % v makru dejansko uporabljajo za funkcije oblikovanja nizov makra. V tem primeru bo funkcija strFmt vidla oblikovni niz kot "--" in ga bo zato vrnila samo.
Nekaj takega:
info(#FormatMacro(salesId,itemId,lineNum));
Bo delovalo, vendar verjetno ne tako, kot želite. Namesto da bi izpisal vrednosti treh spremenljivk, bo izpisal imena spremenljivk, v tem primeru "salesId-itemId-lineNum". (Upoštevajte, da pri posredovanju parametrov makru nisem vstavil presledkov za vejicami, kot običajno storim pri klicih metod. To je zato, ker bo makro dejansko uporabil tudi take presledke, zato bi bil izpis "salesId-itemId-lineNum", če bi jih uporabil).
Če želite makro dejansko uporabiti kot formatirni niz s strFmt, morate znake odstotkov ubežati s poševnimi črtami nazaj, takole:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
To bo dejansko delovalo, kot če bi formatni niz podali neposredno.
To kratko delo 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));
}
Nadaljnje branje
Če vam je bila ta objava všeč, vam bodo morda všeč tudi ti predlogi:
- Pretvorite realno v niz z vsemi decimalkami v Dynamics AX 2012
- Napaka »Ni opredeljenega razreda metapodatkov za objekt podatkovne pogodbe« v Dynamics AX 2012
- Uporaba ogrodja SysExtension Framework, da ugotovite, kateri podrazred ustvariti v Dynamics AX 2012
