AX TIP: Ejecutar Código X++ Externo

!
Warning: This post is over 365 days old. The information may be out of date.

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.