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.
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
;
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:
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:
;
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:
{
#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:
- La diferencia entre data() y buf2Buf() en Dynamics AX 2012
- Cómo iterar sobre los elementos de una enumeración desde el código X++ en Dynamics AX 2012
- Uso del marco SysExtension para determinar qué subclase crear en Dynamics AX 2012
