Miklix

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.


Aquesta pàgina es va traduir automàticament de l'anglès per tal de fer-la accessible al màxim de persones possible. Malauradament, la traducció automàtica encara no és una tecnologia perfeccionada, de manera que es poden produir errors. Si ho prefereixes, pots veure la versió original en anglès aquí:

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í

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

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í:

#define.FormatMacro('%1-%2-%3');
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:

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

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:

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

Lectures addicionals

Si t'ha agradat aquesta publicació, també et poden agradar aquests suggeriments:


Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Christensen

Sobre l'autor

Mikkel Christensen
Mikkel és el creador i propietari de miklix.com. Té més de 20 anys d'experiència com a programador/desenvolupador de programari informàtic professional i actualment treballa a temps complet per a una gran corporació informàtica europea. Quan no fa blocs, dedica el seu temps lliure a una gran varietat d'interessos, aficions i activitats, que fins a cert punt es poden reflectir en la varietat de temes tractats en aquest lloc web.