Microsoft Dynamics ‘AX 7’ / Rainier

La noticia de que existe una próxima versión de Microsoft Dynamics AX (versión 7) y que ésta va a ser una revolución en cuanto a la tecnología que la mueve y la experiencia de usuario no es nueva, lo comentábamos aquí ya en Agosto de 2013. Microsoft lleva comentando el proyecto Rainier varios años en diferentes eventos, pero las noticias interesantes siguen bajo NDA por lo que no se pueden publicar todavía.

Microsoft Dynamics 'AX 7'

Sin embargo, en recientes eventos que se han organizado en torno al producto, como los recientes AXUG Focus 2015 y ASUG Summit y las pasadas Convergence 2015 y Microsoft Dynamics Technical Conference 2015 se han publicado numerosas imágenes (Por ejemplo: 1 2 3 4 5 6 7) que revelan el aspecto que va teniendo el producto y la nueva interfaz, además de algunas ideas (sin mucho detalle concreto) de los cambios en cuanto a la tecnología, arquitectura y herramientas de desarrollo, todas alineadas con el nuevo mantra de Microsoft: Cloud first, Mobile first.

Continue Reading…

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.