Miklix

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.


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

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

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

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

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:

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));
}
Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Bang Christensen

Sobre l'autor

Mikkel Bang 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.