Miklix

Formato de cadenas con macro y strFmt en Dynamics AX 2012

Publicado: 16 de febrero de 2025, 0:48:23 UTC
Última actualización: 12 de enero de 2026, 8:44: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 esta publicación se basa en Dynamics AX 2012 R3. Puede que no sea válida 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 lo había encontrado 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 investigarlo, descubrí que las macros pueden usarse para formatear cadenas, algo que tampoco sabía. Bueno, siempre es bueno aprender algo nuevo, pero aun así 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 % de la macro se usan para las funciones de formato de cadena de la macro. En este caso, la función strFmt interpretará la cadena de formato como "--" y, por lo tanto, solo la devolverá.

Algo como esto:

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

Funcionará, pero probablemente no como quieres. En lugar de mostrar los valores de las tres variables, mostrará sus nombres; en este caso, "salesId-itemId-lineNum". (Observa 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 los usará, por lo que la salida sería "salesId-itemId-lineNum" si lo hiciera).

Para utilizar una macro como cadena de formato con strFmt, debe 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));
}

Lectura adicional

Si te ha gustado esta publicación, puede que también te gusten estas sugerencias:


Compartir en BlueskyCompartir en FacebookCompartir en LinkedInCompartir en TumblrCompartir en XCompartir en LinkedInPin en Pinterest

Mikkel Christensen

Sobre el autor

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