HOWTO: Eventos en AX 2012 para minimizar conflictos

Como se puede adivinar de algunos de mis anteriores post,  soy un fiel defensor de uno de los grandes olvidados de AX 2012: Los eventos

En mi afán de evangelizar a favor de uso, he dado con un ejemplo muy evidente de sus ventajas. A estas alturas supongo que casi todo el mundo conoce la posibilidad de añadir nuevas opciones al menú Add-Ins del entorno de desarrollo de AX 2012 y anteriores. Es realmente fácil, sólo hay que crear una nueva clase con un método main al uso, un menú ítem que apunte a esa clase, y añadir el menú ítem al menú estándar SysContextMenu. Con esto conseguimos que nuestro menú ítem se muestre al hacer click-derecho sobre los elementos del AOT, por ejemplo (Startup Project es el nuevo add-in):

SysContextMenu Add-In

Sin embargo, para hacerlo realmente bien es necesario alguna modificación más. En mi ejemplo, el nuevo add-in sirve para convertir el proyecto seleccionado en el proyecto de inicio para el usuario actual. Es simple, pero nos sirve como ejemplo de un add-in que solo debe mostrarse cuando hacemos click derecho en un proyecto, y no en cualquier otro tipo de elemento del AOT. Para eso, como muestra la documentación, debemos modificar el método verifyItem de la clase SysContextMenu, que es un infierno de if-else in switches para determinar si el elemento debe mostrarse o no, dependiendo de la clase que lo llama, el tipo de elemento y un larguísimo y desastroso etcétera.

Continue Reading…

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

Continue Reading…

HOWTO: Crear controles y eventos dinámicamente en formularios AX

En este HOWTO me gustaría explicar el proceso completo para crear dinámicamente controles en un formulario existente (aunque también podría no existir, pero ya sería complicar demasiado) y además manejar los eventos generados por ese control tanto dentro como fuera del formulario en sí.

Lo haremos paso a paso, de lo mas facil a lo mas complicado:

Empezaremos con un formulario nuevo de AX totalmente estándar sin ninguna propiedad modificada:

Dynamic Runtime Forms | 1

Continue Reading…