Microsoft Dynamics AX 2012: Eventos e integración .NET (I)

Una de las novedades técnicas más interesantes de Microsoft Dynamics AX 2012 (en mi opinión) es la incorporación de los Eventos. Conocerlos y utilizarlos es a partir de ahora una obligación para poder aprovechar todas sus ventajas:

¿Qué son los eventos?

Veámoslo con un ejemplo paso a paso. Creamos una clase nueva en Dynamics AX que extienda de RunBase, e implementamos su método main() como siempre llamando a un método run() interno que mostrará un mensaje:

class JAEEEjemploEventos extends RunBase
{
}

public static void main(Args _args)
{
    JAEEEjemploEventos ejemploEventos = new JAEEEjemploEventos();

    ejemploEventos.run();
}

public void run()
{
    info("Ejecutando clase JAEEEjemploEventos en X++");
}

Una clase muy simple, si la ejecutamos directamente (F5) mostrará un mensaje por el InfoLog. Ahora vamos a abrir un Visual Studio 2010 que debemos tener instalado en la máquina de desarrollo de Microsoft Dynamics AX 2012, creamos un nuevo proyecto de tipo Visual C# Class Library. Le damos un nombre al proyecto y una ubicación (la ruta es indiferente):

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT - New project

Si no lo hemos hecho antes, ir a View > Application Explorer:

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT

El AOT se muestra ahora en el área de trabajo:

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT

Buscamos la clase recién creada (se puede buscar escribiendo encima, igual que en el AOT desde Dynamics AX) y desplegamos sus métodos. Es importante que en este momento el cursor esté dentro de la nueva clase que se ha creado en el proyecto. Click derecho en el método run y después Add post-event handler. Visual Studio nos avisa que el proyecto en el que estamos trabajando no se ha añadido al AOT y pregunta si deseamos añadirlo ahora. Respondemos ya que queremos que este código se guarde en el AOT como parte de un desarrollo.

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT - Add post-event handler

Las consecuencias de estas dos acciones (agregar un manejador de eventos y añadir un proyecto de Visual Studio al AOT) se pueden ver en el código, donde se ha añadido un nuevo método con unas anotaciones propias de Dynamics AX (después veremos qué significan) y también en el noto del proyecto Referencias donde se ha añadido la referencia al ensamblado Microsoft.Dynamics.AX.ManagedInterop que nos va a permitir interactuar con objetos de Dynamics AX desde nuestro código C#:

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT - Microsoft.Dynamics.AX.ManagedInterop

Para comprobar esta interacción, volvemos al Application Explorer y buscamos la clase Global (todos sabemos para qué sirve en Dynamics AX). Hacemos Click derecho y Add to project:

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT - Add to project

Ahora en el Application Explorer podemos ver que la clase Global forma parte de nuestro proyecto y podremos utilizarla como si fuera una clase declarada en el código C# (de hecho, lo es, como veremos):

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT - Global Class

Modificamos el código C# añadiendo una nueva línea que utiliza la clase Global de Dynamics AX para mostrar un mensaje por el InfoLog. Las similitudes con el código X++ correspondiente son evidentes.

namespace JAEE.Blog.EventHandler
{
    public class JAEEBlogEventHandler
    {
        // Do not change the name of the event handler method. If you rename the method, the event handler will not work.
        [Microsoft.Dynamics.AX.ManagedInterop.XppClassDefiningEventAttribute(@"\Classes\JAEEEjemploEventos")]
        static public void PostRun(XppPrePostArgs args)
        {
            Global.info("Ejecutando clase JAEEBlogEventHandler desde C#!");
        }
    }
}

Por último guardamos todo y compilamos el proyecto en el menú Build > Build Solution (no hace falta hacer Deploy, esto lo veremos más adelante). La venta Output nos informará de que se ha creado una librería (.dll) llamada como nuestro proyecto. Cerramos Visual Studio y también el cliente de Microsoft Dynamics AX si todavía lo teníamos abierto (también veremos después este tema).

Volvemos a abrir un cliente de Dynamics AX, buscamos nuestra clase y de momento podemos ver que algo ha cambiado, desde Visual Studio hemos adjuntado un majenador de eventos que ahora se puede ver en Dynamics AX:

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT - Event handler subscription

Sin embargo no podemos ver el código directamente. Lo que son interesantes aquí son las propiedades, que nos van a indicar dónde está el código, una DLL en este caso, que se encarga de procesar el evento:

Visual Studio 2010 - Application Explorer Axapta Object Tree AOT - Event handler properties

Este es sólo un ejemplo muy sencillo para introducir una parte de la funcionalidad de Eventos y la nueva integración de Dynamics AX con .NET, en el próximo artículo veremos con más detalle todas las posibilidades y discutiremos ventajas e inconvenientes de utilizar Eventos (también en X++) frente a modificaciones X++ tradicionales.

Descarga

1 comentario
  • Jose Luis
    julio 26, 2012

    hola, buen dia!
    Queria felicitarlepor la información y qusiera pedirle ungran favor, no soy tan experto en esta area y ahora tengoque modificar un reporte standar de Ax2012,pero no se por donde empezar, se supone que los reportes y dichas modificacines se hacen desde visual studio, peor cuando agrego la clase que quiero modificar no me deja editarla, etonces; le agradeceria si me pudiera proporcionar unpequeña guia de cm haer todo ello.

    gracias o su atencion y saludos.