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.