Close

febrero 14, 2014

¿Como se usan los menús contextuales en ABAP?

Los menús contextuales (que se muestran al hacer clic derecho sobre un elemento) pueden ser muy útiles, ABAP permite que diseñemos estos menús en tiempo de diseño (estáticos y re-utilizables) o generarlos dinamicamente en tiempo de ejecución (con mayor personalización según el estado del programa, pero poco reutilizables) 

Menús contextuales estáticos.

Veamos primero como crear y utilizar menús contextuales estáticos, para esto vamos a crear un dynpro con dos objetos de texto, a uno le pondremos por nombre TEXTO y al otro NUMERO, no olvidemos crear las variables en el top include para guardar los valores de los textos.

Para definir el menú contextual para el objeto TEXTO, debemos agregar un código en la propiedad ON_CTMENU_ en este caso le pondremos MC_TEXTO.

abap_menu_contextual_1

Ahora vemos a crear un menú contextual haciendo clic derecho en el programa y seleccionando la opción Crear y luego Status Gui.

crear-menu-contextual-02

Y ahora le asignamos un nombre, una descripción y lo marcamos como menú contextual

crear-menu-contextual-03

Ahora hacemos doble clic sobre la descripción del menú y agregamos los elementos que se delegaran en el menú contextual

crear-menu-contextual-opciones

Ahora para utilizar el menú debemos agregar una rutina para controlarlo en el include para inputs, el código deberá verse como este:

Pueden utilizar el código anterior en cualquier programa solo modificando el nombre de la sub rutina sustituyendo mc_texto por el código que utilizaron en su objeto dentro del dynpro (al inicio de este articulo) y el nombre del menú contextual que en este caso fue ‘MENU_CONTEXTUAL’. Si hicimos todos los pasos anteriores ahora al ejecutar el programa veremos nuestro menú al hacer clic derecho sobre el texto.

Menús contextuales dinámicos.

Ahora vamos a crear un menú contextual creado en tiempo de ejecución para esto vamos a seguir todos los pasos del ejemplo anterior omitiendo la parte en la que creamos el menú con sus opciones y vamos a sustituir el código anterior por este otro: