AX TIP: Ejecutar Código X++ Externo
Siguiendo con el hilo de mi anterior artículo, otro truco parecido consiste en la posibilidad de utilizar la clase XppCompiler para ejecutar manualmente un fragmento de código almacenado de forma externa, ya sea en la base de datos, en una variable, en ficheros de texto, etc.
Para ello podemos utilizar una sintaxis parecida a la siguiente:
static void JAEE\_XppCompiler\_Code(Args \_args)
{
XppCompiler comp;
Source codigo =
"InventLocationId findLocation(InventDimId \_inventDimId)" +
"{" +
" return InventDim::find(\_inventDimId).InventLocationId;" +
"}";
InventDimId inventDimId = "1879356425";
InventLocationId result;
new ExecutePermission().assert();
comp = new XppCompiler();
if (!comp.compile(codigo))
throw error("Código no válido.");
result = runBuf(codigo, inventDimId);
CodeAccessPermission::revertAssert();
info(strFmt("Resultado: %1", result));
}
Tal como decía en el artículo anterior, utilizar manualmente este tipo de API es peligroso y debe ser asegurado. En aquel capítulo incluía algunos enlaces de interés para desarrollar código seguro.
Las posibilidades a la hora de utilizar esta técnica son muy diversas. Podemos utilizarlo para ejecutar pequeños snipets de código almacenados en la base de datos de forma que un usuario pueda realizar pequeñas funciones personalizables, o podemos ir mucho más allá. Por ejemplo en este blog de MSDN nos explican cómo, aprovechando estas mismas clases y ejecutándolas desde el .NET Business Connector, se puede hacer una aplicación de consola para ejecutar fragmentos de código X++ desde línea de comandos.