Las ventanas emergentes son una de las utilidades más usadas en la creación de aplicaciones. En el siguiente artículo se describe como crear y utilizar distintos Pop-ups en una aplicación Web Dynpro for Abap en tres sencillos pasos. Todo el código que aquí se indica se debe escribir en un mismo método que se utiliza para crear la ventana emergente.
Paso 1: Crear instancia
Lo primero que se necesita para crear cualquier tipo de Pop-up es crear una instancia de la clase IF_WD_WINDOW_MANAGER. Para ello se utiliza el método GET_WINDOW_MANAGER de la clase IF_WD_COMPONENT, como se muestra a continuación:
DATA lo_window_manager TYPE REF TO if_wd_window_manager. DATA lo_api_component TYPE REF TO if_wd_component.lo_api_component = wd_comp_controller->wd_get_api( ). lo_window_manager = lo_api_component->get_window_manager( ).
La clase IF_WD_WINDOW_MANAGER es la que tiene los métodos para poder crear las ventanas emergentes.
Paso 2: Definir tipo de Pop-Up
Existe la posibilidad de crear dos tipos de ventanas emergentes mediante dos métodos diferentes: uno para crear ventanas estándar de confirmación y otro para crear pop-ups personalizados.
Pop-Up to confirm
El método CREATE_POPUP_TO_CONFIRM permite crear una ventana estándar de confirmación. Puede ser utilizada para responder una pregunta de sí o no o mostrar un mensaje de información. Con la instancia recogida anteriormente, creamos la ventana de la siguiente manera:
DATA lo_window TYPE REF TO if_wd_window. lo_window = lo_window_manager->create_popup_to_confirm( text = lt_text button_kind = if_wd_window=>co_buttons_yesno message_type = 2 window_title = `Título ventana` ).
En el parámetro text se debe pasar una tabla de tipo STRING, que contendrá el texto que se quiere mostrar en la ventana. En el parámetro button_kind se indica que botones se quiere que tenga la ventana. En el caso del ejemplo aparecerán los botones “Si” y “No”. El resto de posibles botones se pueden ver en los atributos de la clase IF_WD_WINDOW. Message_type indica el tipo de mensaje a mostrar, y el icono que aparecerá en la ventana (0 sin icono, 1 información, 2 pregunta, 3 error, 4 cancelación, 5 advertencia) y por último se puede indicar un título para la ventana en el parámetro window_title. Estos son los parámetros más importantes, aunque existen otros para indicar la posición y tamaño de la ventana.
Pop-Up personalizado
Si lo que se quiere es crear un Pop-Up editado por el desarrollador, es necesario crear una nueva ventana en la que meteremos una nueva vista. Esta vista se editará como cualquier otra para que tenga la apariencia deseada, con su layout, sus acciones y métodos. Después, se llamará al método CREATE_WINDOW para crear el Pop-Up en la vista desde donde se está creando la ventana.
DATA lo_window TYPE REF TO if_wd_window. lo_window = lo_window_manager->create_window( window_name = 'NOMBRE_VENTANA' title = `Título ventana` button_kind = if_wd_window=>co_buttons_okcancel ).
En el parámetro window_name es preciso indicar el nombre de la ventana que hemos creado para el Pop-Up. También es posible, como en el caso anterior, indicar un título y elegir unos botones para la ventana emergente.
Paso 3: Asociar acciones
Una vez elegido el tipo de ventana a utilizar, el siguiente paso para cualquier tipo de ventana es asociar una acción a cada botón de la ventana. Este es un paso opcional, pero necesario si la aplicación debe realizar algún tipo de acción al pulsar un botón en concreto.
Primero se debe definir una acción a asociar al botón en cuestión. Después con el método SUBSCRIBE_TO_BUTTON_EVENT relacionamos el botón con la acción a realizar.
DATA lr_view_controller TYPE REF TO if_wd_view_controller. lr_view_controller = wd_this->wd_get_api( ). lo_window->subscribe_to_button_event( button = if_wd_window=>co_button_cancel action_name = 'CANCEL' action_view = lr_view_controller ).
En el ejemplo superior, se está indicando que la acción “CANCEL” definida en la propia vista se ejecute al pulsar el botón CANCEL en la ventana emergente.
Por último, se debe llamar al método OPEN para que la Pop-Up aparezca en pantalla.
lo_window->open( ).
Todas las partes que se han comentado anteriormente se deberían escribir seguidas en el momento que se quiera crear la ventana emergente. Por ejemplo, si queremos utilizar un pop-up para confirmar la salida al pulsar un botón de volver, pondremos el siguiente código en la acción asociada al evento ‘OnAction’ del botón:
METHOD onactionpreguntar_salir. ** Declaraciones DATA lo_window_manager TYPE REF TO if_wd_window_manager. DATA lo_api_component TYPE REF TO if_wd_component. DATA lo_window TYPE REF TO if_wd_window. DATA lt_text TYPE string_table. DATA lv_text TYPE string. lv_text = '¿Seguro que desea salir?'. APPEND lv_text TO lt_text. ** Se recoge la API y el Window Manager lo_api_component = wd_comp_controller->wd_get_api( ). lo_window_manager = lo_api_component->get_window_manager( ). ** Se crea la ventana lo_window = lo_window_manager->create_popup_to_confirm( text = lt_text message_type = 1 window_title = '¿SALIR?' ). ** Se asocia la Accion SALIR al botón SI DATA: lr_view_controller TYPE REF TO if_wd_view_controller. lr_view_controller = wd_this->wd_get_api( ). lo_window->subscribe_to_button_event( button = if_wd_window=>co_button_yes action_name = 'SALIR' action_view = lr_view_controller ). ** Se abre la ventana lo_window->open( ). ENDMETHOD.
Como resultado, al pulsar el botón, se mostrará un pop-up como el siguiente: