Format de cadena amb macro i strFmt al Dynamics AX 2012
Publicat: 5 de març del 2025, a les 19:30:20 UTC
Última actualització: 12 de gener del 2026, a les 8:44:52 UTC
Aquest article descriu un comportament peculiar al Dynamics AX 2012 quan s'utilitza una macro com a cadena de format a l'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 el Dynamics AX 2012 R3. Pot ser vàlida o no per a altres versions.
Recentment he tingut un problema amb la funció strFmt que m'ha desconcertat una mica. La part més desconcertant és que, per alguna estranya coincidència, no m'hi havia trobat mai abans en els meus molts anys com a desenvolupador d'Axapta/Dynamics AX.
El problema era 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 d'investigar-ho, vaig descobrir que les macros es poden utilitzar per formatar cadenes, cosa que també desconeixia. Bé, sempre és bo aprendre alguna cosa nova, però tot i així em va sorprendre molt no haver-me trobat amb això abans.
Bàsicament, alguna 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 pròpies de la macro. En aquest cas, la funció strFmt veurà la cadena de format com a "--" i, per tant, només retornarà això.
Una cosa així:
info(#FormatMacro(salesId,itemId,lineNum));
Funcionarà, però probablement no de la manera que voleu. En lloc de mostrar els valors de les tres variables, mostrarà els noms de les variables, en aquest cas "salesId-itemId-lineNum". (Fixeu-vos que no he posat espais després de les comes en passar paràmetres a la macro, com faig normalment en les crides de mètode. Això és degut a que 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, cal que utilitzeu barres invertides per escapar els signes de percentatge, com aquesta:
;
info(strFmt(#FormatMacro, salesId, itemId, lineNum));
Això funcionarà com si haguéssiu proporcionat la cadena de format directament.
Aquesta petita feina 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));
}
Lectures addicionals
Si t'ha agradat aquesta publicació, també et poden agradar aquests suggeriments:
- La diferència entre data() i buf2Buf() a Dynamics AX 2012
- Ús del marc SysExtension per esbrinar quina subclasse s'ha d'instanciar al Dynamics AX 2012
- Error "No s'ha definit cap classe de metadades per a l'objecte del contracte de dades" al Dynamics AX 2012
