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.
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
;
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:
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:
;
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:
{
#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:
- A SysExtension Framework segítségével megtudhatja, melyik alosztályt kell példányosítani a Dynamics AX 2012-ben
- "Nincs metaadatosztály meghatározva az adatszerződés objektumhoz" hiba a Dynamics AX 2012-ben
- Lekérdezés használata SysOperation adatszerződési osztályban a Dynamics AX 2012-ben
