Miklix

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.


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 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

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

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:

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

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

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

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

Ta majhna naloga 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));
}
Delite na BlueskyDelite na FacebookuDelite na LinkedInuDelite na TumblrDelite na XDelite na LinkedInuPripni na Pinterest

Mikkel Bang Christensen

O avtorju

Mikkel Bang 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.