HOWTO: AX – Modificar el menu contextual de un objeto

Al hacer “click derecho” sobre un objeto en Dynamics Axapta se ejecuta el metodo showContextMenu, el cual como siempre, podemos sobrecargar. Esta es la pinta que tiene inicialmente:

public int showContextMenu(int MenuHandle)
{
   int ret;

   ret = super(MenuHandle);

   return ret;
}

Es como la mayoría de métodos sobrecargados. Vamos a sustituirlo por este otro código:

int showContextMenu(int MenuHandle)
{
   int         ret;
   PopupMenu   menu;
   int         menuItem;
   ;

   // Crea un nuevo menú utilizando el manejador recibido por parámetros
   menu = PopupMenu::create(MenuHandle, this.hWnd());

   // Añade un nuevo Menu Item al menú recién creado
   menuItem = menu.insertItem("Mi nuevo menú");

   // Abre el menú
   ret = menu.draw();

   // Comprueba el Menu Item que se ha pulsado
   if (ret == menuItem)
   {
       // Si es el mío, pongo código aqui

       Box::info('Pon tu código aquí!');

       return 0;
   }

   // Si ha pulsado alguno que no es el mío, se lo devuelvo al estándar
   return ret;
}

Como se puede ver en el ejemplo, podemos añadir por código un nuevo MenuItem al menu contextual y a la vez, capturar la pulsación del mismo para poder ejecutar nuestro propio código de respuesta.

Descarga

Nadie odia el software mas que los programadores

Hace unos dias Jeff Atwood publicó un artículo tan curioso como interesante en su blog Coding Horror (el cual ya he recomendado alguna vez), reflexionando sobre temas como la necesidad y la calidad del software que nos rodea. Parte de la base de que nadie está mas capacitado para odiar el software como los propios programadores, cito lo que me ha parecido mas divertido:



Let me share a recurring nightmare I have with you. In this dream, I’m sitting down in front of a computer which boots up, running an operating system I’ve written. I then launch a web browser I’ve created from scratch, all by myself, and navigate to a website I’ve constructed. I click on the first link and the whole thing bluescreens. And the bluescreen itself bluescreens and begins to fold in on itself, collapsing into a massive explosion that destroys an entire city block.


Una lectura muy entretenida, yo me quedo con una frase que hago mía:



[…] the best choice of software is often no software […]


Leyendo este artículo he ido a parar a otro sobre la misma temática pero mas extenso y quizás mas profundo sobre el por qué todos odiamos tanto el software (incluso, si no más, el que nosotros mismos desarrollamos), que también recomiendo: why software sucks

Futuros cambios en X++

Desde un blog publicado por el personal de desarrollo de Microsoft, publican una serie de cambios (no necesariamente los únicos cambios) que se van a realizar en el lenguaje X++ (el lenguaje de Microsoft Dynamics AX) en la próxima versión del producto (de momento, Dynamics AX 6)


Se puede ver el artículo aquí: Forhcoming changes to the X++ language


La mayoría son cambios orientados a mejorar la seguridad del código, dejando ver el esmero con el que mejoran la calidad tanto del compilador como de los desarrollos que pueden salir de él.

HOWTO: AX – Ventana de progreso para procesos largos

Me gustaría empezar a colgar pequeños trucos o trozos de código útiles, por un lado con un fin divulgativo para que si a alguien le sirve, lo utilice; y por otro lado con un fin documental para hacer una pequeña biblioteca de código y poder consultarla en caso necesario. Sugerencias seran bien recibidas, como siempre. Como es el primero, empezare por uno muy sencillo:

Se trata de utilizar la clase SysOperationProgress para mostrar el diálogo estandar de progreso, que podemos (y debemos) utilizar en procesos que se puedan alargar mas de unos pocos segundos

SysOperationProgress p = new SysOperationProgress();
int i;
;

#AviFiles

p.setCaption("Título del diálogo");
p.setAnimation(#AviTransfer);
p.setTotal(100000);

for (i=1; i <= 100000; i++)
{
   p.setText(strfmt("Progreso %1", i));
   p.incCount();
}

Su utilización es bien sencilla y se puede complicar, por ejemplo para añadir varias barras de progreso en el mismo diálogo, jugando, por ejemplo, con los parámetros del constructor de la clase.

Descargas