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