Miklix

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

Megjelent: 2025. február 16. 0:48:27 UTC
Utolsó frissítés: 2026. január 12. 8:44:25 UTC

Ez a cikk a Dynamics AX 2012 néhány sajátos viselkedését ismerteti, amikor makrót használ formázó karakterláncként az strFmt függvényben, valamint példákat is mutat arra, hogyan lehet ezt megkerülni.


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 verzión alapulnak. Előfordulhat, hogy más verziókra nem érvényesek.

Nemrég egy problémába ütköztem az strFmt függvénnyel, ami egy kicsit zavarba ejtett. A legzavarba ejtőbb az egészben az volt, hogy valami furcsa véletlen folytán soha nem találkoztam ezzel korábban az Axapta/Dynamics AX fejlesztőként eltöltött hosszú éveim alatt.

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

Miután jobban belegondoltam, felfedeztem, hogy maguk a makrók is használhatók karakterláncok formázására, amit szintén nem tudtam. Hát, mindig jó valami újat tanulni, de mégis nagyon meglepődtem, hogy ezzel korábban nem találkoztam.

Alapvetően valami ilyesmi

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

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

Nem fog működni, mert a makróban lévő % jeleket valójában a makró saját karakterláncformázási funkcióihoz használják. Ebben az esetben az strFmt függvény a formázó 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éd. A három változó értékének kimenete helyett a változók nevét adja ki, ebben az esetben "salesId-itemId-lineNum". (Figyeld meg, hogy a makrónak átadott paramétereknél nem tettem szóközöket a vesszők után, ahogy általában a metódushívásoknál szoktam. Ez azért van, mert a makró valójában ilyen szóközöket is használ, így a kimenet "salesId-itemId-lineNum" lenne, ha így tennék).

Ahhoz, hogy egy makrót formázó karakterláncként használhassunk az strFmt függvénnyel, a százalékjeleket fordított perjelekkel kell elválasztani, például így:

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

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

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

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

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));
}

További olvasmányok

Ha tetszett ez a bejegyzés, akkor ezek a javaslatok is érdekelhetik:


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 Christensen

A szerzőről

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