Miklix

Formato de cadenas con macro y strFmt en Dynamics AX 2012

Publicado: 16 de febrero de 2025, 0:48:23 UTC

Este artículo describe algunos comportamientos peculiares en Dynamics AX 2012 cuando se utiliza una macro como cadena de formato en strFmt, así como ejemplos sobre cómo solucionarlos.


Esta página ha sido traducida automáticamente del inglés para hacerla accesible al mayor número de personas posible. Lamentablemente, la traducción automática no es todavía una tecnología perfeccionada, por lo que pueden producirse errores. Si lo prefiere, puede consultar la versión original en inglés aquí:

String Formatting with Macro and strFmt in Dynamics AX 2012

La información de este artículo se basa en Dynamics AX 2012 R3. Puede que sea válida o no para otras versiones.

Recientemente me encontré con un problema con la función strFmt que me desconcertó un poco. Lo más desconcertante fue que, por una extraña coincidencia, nunca antes me había encontrado con él en mis muchos años como desarrollador de Axapta/Dynamics AX.

El problema fue que intenté usar una macro como cadena de formato para la función strFmt y no funcionó. Ignoró por completo los parámetros % y solo devolvió el resto de la cadena.

Después de investigar, descubrí que las macros se pueden usar para formatear cadenas, algo que tampoco sabía. Bueno, siempre es bueno aprender algo nuevo, pero me sorprendió mucho no haberme topado con esto antes.

Básicamente algo como esto

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

no funcionará porque los signos % en la macro se utilizan en realidad para las características de formato de cadena de la propia macro. En este caso, la función strFmt verá la cadena de formato como "--" y, por lo tanto, solo devolverá eso.

Algo como esto:

#define.FormatMacro('%1-%2-%3');
info(#FormatMacro(salesId,itemId,lineNum));

funcionará, pero probablemente no de la forma que desea. En lugar de mostrar los valores de las tres variables, mostrará los nombres de las variables, en este caso "salesId-itemId-lineNum". (Observe que no puse espacios después de las comas al pasar parámetros a la macro, como suelo hacer en las llamadas a métodos. Esto se debe a que la macro también utilizará esos espacios, por lo que el resultado sería "salesId-itemId-lineNum" si lo hiciera).

Para poder utilizar una macro como cadena de formato con strFmt, es necesario escapar los signos de porcentaje con barras invertidas, de la siguiente manera:

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

info(strFmt(#FormatMacro, salesId, itemId, lineNum));

En realidad, esto funcionará como si hubiera proporcionado la cadena de formato directamente.

Este pequeño trabajo ilustra los ejemplos:

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));
}
Compartir en BlueskyCompartir en FacebookCompartir en LinkedInCompartir en TumblrCompartir en XCompartir en LinkedInPin en Pinterest

Mikkel Bang Christensen

Sobre el autor

Mikkel Bang Christensen
Mikkel es el creador y propietario de miklix.com. Tiene más de 20 años de experiencia como programador informático profesional y desarrollador de software, y actualmente trabaja a tiempo completo para una gran empresa europea de TI. Cuando no está escribiendo en su blog, dedica su tiempo libre a una gran variedad de intereses, aficiones y actividades, que en cierta medida pueden verse reflejados en la variedad de temas tratados en este sitio web.