Format de cadena amb macro i strFmt al Dynamics AX 2012
Publicat: 5 de març del 2025, a les 19:30:20 UTC
Aquest article descriu un comportament peculiar al Dynamics AX 2012 quan s'utilitza una macro com a cadena de format a strFmt, així com exemples sobre com solucionar-ho.
String Formatting with Macro and strFmt in Dynamics AX 2012
La informació d'aquesta publicació es basa en Dynamics AX 2012 R3. Pot ser vàlid o no per a altres versions.
Recentment he trobat un problema amb la funció strFmt que em va desconcertar una mica. La part més desconcertant va ser que, per una estranya coincidència, no m'havia trobat mai abans en els meus molts anys com a desenvolupador d'Axapta/Dynamics AX.
El problema va ser que vaig intentar utilitzar una macro com a cadena de format per a la funció strFmt i simplement no va funcionar. Va ignorar completament els paràmetres % i només va retornar la resta de la cadena.
Després de mirar-ho, vaig descobrir que les macros en si es poden utilitzar per formatar cadenes, cosa que també era una cosa que no sabia. Bé, sempre és bo aprendre alguna cosa nova, però encara em va sorprendre molt que no m'hagués trobat amb això abans.
Bàsicament, una cosa així
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
no funcionarà perquè els signes % de la macro s'utilitzen realment per a les funcions de format de cadena de la macro. En aquest cas, la funció strFmt veurà la cadena de format com "--" i, per tant, només retornarà això.
Alguna cosa així:
info(#FormatMacro(salesId,itemId,lineNum));
funcionarà, però probablement no com voleu. En lloc d'emetre els valors de les tres variables, sortirà els noms de les variables, en aquest cas "salesId-itemId-lineNum". (Tingueu en compte que no he posat espais després de les comes quan passava paràmetres a la macro, com acostumo a fer a les trucades de mètodes. Això és perquè la macro també utilitzarà aquests espais, de manera que la sortida seria "salesId- itemId-lineNum" si ho fes).
Per utilitzar realment una macro com a cadena de format amb strFmt, heu d'escapar els signes de percentatge amb barres invertides, com aquesta:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Això funcionarà com si haguéssiu subministrat directament la cadena de format.
Aquest petit treball il·lustra els exemples:
{
#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));
}