Miklix

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.


Ta stran je bila strojno prevedena iz angleščine, da bi bila dostopna čim večjemu številu ljudi. Žal strojno prevajanje še ni popolna tehnologija, zato lahko pride do napak. Če želite, si lahko izvirno angleško različico ogledate tukaj:

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

#define.FormatMacro('%1-%2-%3')
;

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:

#define.FormatMacro('%1-%2-%3');
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:

#define.FormatMacro('\\%1-\\%2-\\%3')
;

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

To bo dejansko delovalo, kot če bi formatni niz podali neposredno.

To kratko delo ponazarja primere:

static void StrFmtMacroTest(Args _args)
{
    #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:


Delite na BlueskyDelite na FacebookuDelite na LinkedInuDelite na TumblrDelite na XDelite na LinkedInuPripni na Pinterest

Mikkel Christensen

O avtorju

Mikkel Christensen
Mikkel je avtor in lastnik spletne strani miklix.com. Ima več kot 20 let izkušenj kot profesionalni računalniški programer/razvijalec programske opreme in je trenutno za polni delovni čas zaposlen v veliki evropski IT korporaciji. Kadar ne piše bloga, svoj prosti čas posveča številnim interesom, hobijem in dejavnostim, kar se do neke mere odraža v raznolikosti tem na tem spletnem mestu.