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

2 comentarios
  • jaestevan
    julio 27, 2012

    El método se encuentra disponible normalmente en los formularios.

    La funcionalidad del PB es particular ya que no hay un formulario directamente sino que se construye dinámicamente en cada ejecución (por eso es tan lento). Esta funcionalidad se puede conseguir en el PB pero resulta mucho mas complejo que en un formulario normal.

    Saludos.

  • Atreju
    junio 11, 2011

    En qué clase encuentro el Método showContextMenu ??? Por otra parte, cuando ejecuto el PB, si aprieto el botón derecho en cualquier de los campos, se traba todo el AX, crees que ese código me ayude a evitarlo? Gracias!