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.
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
;
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:
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:
;
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:
{
#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));
}