Miklix

Karakterláncformázás makróval és strFmt-vel a Dynamics AX 2012-ben

Megjelent: 2025. február 16. 0:48:27 UTC

Ez a cikk leír néhány sajátos viselkedést a Dynamics AX 2012-ben, amikor makrót használ formátumkarakterláncként az strFmt-ben, valamint példákat mutat be a megkerülésére.


Ezt az oldalt angolból gépi fordítással készítettük, hogy minél több ember számára elérhető legyen. Sajnos a gépi fordítás még nem tökéletes technológia, ezért előfordulhatnak hibák. Ha szeretné, itt megtekintheti az eredeti angol nyelvű változatot:

String Formatting with Macro and strFmt in Dynamics AX 2012

A bejegyzésben található információk a Dynamics AX 2012 R3-on alapulnak. Lehet, hogy más verziókra érvényes, de lehet, hogy nem.

Nemrég találkoztam egy problémával az strFmt funkcióval kapcsolatban, amely egy kicsit megzavart. A legmegdöbbentőbb az volt, hogy valami furcsa egybeesés folytán még soha nem találkoztam vele az Axapta/Dynamics AX fejlesztői pályafutásom során.

A probléma az volt, hogy megpróbáltam makrót használni az strFmt függvény formátum karakterláncaként, de egyszerűen nem működött. Teljesen figyelmen kívül hagyta a % paramétereket, és csak a karakterlánc többi részét adta vissza.

Miután megvizsgáltam, rájöttem, hogy maguk a makrók is használhatók karakterláncok formázására, amit szintén nem tudtam. Na jó, mindig jó valami újat tanulni, de akkor is nagyon meglepődtem, hogy még véletlenül sem találkoztam ezzel.

Alapvetően valami ilyesmi

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

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

nem fog működni, mert a makró % jelei valójában a makró saját karakterlánc-formázási szolgáltatásaihoz használatosak. Ebben az esetben az strFmt függvény a formázási karakterláncot "--"-ként fogja látni, és ezért csak azt adja vissza.

Valami ilyesmi:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

működni fog, de valószínűleg nem úgy, ahogy szeretné. A három változó értékének kiírása helyett a változók nevét adja ki, ebben az esetben "salesId-itemId-lineNum". (Vegyük észre, hogy nem tettem szóközt a vessző után, amikor paramétereket adtam át a makrónak, mint általában a metódushívásoknál. Ez azért van, mert a makró valóban ilyen szóközöket is fog használni, így a kimenet "salesId-itemId-lineNum" lenne, ha ezt tenném).

Ahhoz, hogy ténylegesen makrót használjon formázási karakterláncként az strFmt-vel, meg kell szüntetnie a százalékjeleket fordított perjelekkel, például:

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

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

Ez valójában úgy fog működni, mintha közvetlenül megadta volna a formátum karakterláncot.

Ez a kis munka a példákat illusztrálja:

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));
}
Oszd meg a Bluesky-nOszd meg a FacebookonOszd meg a LinkedIn-enOszd meg a Tumblr-enOszd meg X-enOszd meg a LinkedIn-enPin a Pinteresten

Mikkel Bang Christensen

A szerzőről

Mikkel Bang Christensen
Mikkel a miklix.com létrehozója és tulajdonosa. Több mint 20 éves tapasztalattal rendelkezik, mint hivatásos számítógépes programozó/szoftverfejlesztő, és jelenleg teljes munkaidőben dolgozik egy nagy európai informatikai vállalatnál. Amikor nem blogol, szabadidejét érdeklődési körének, hobbijainak és tevékenységeinek széles skálájával tölti, ami bizonyos mértékig tükröződhet a weboldalon tárgyalt témák sokféleségében.