POPUP_TO_CONFIRM en ABAP

En desarrollo clásico con dynpros en ABAP, hay una situación crítica que debes controlar siempre, y es que el usuario puede salir de la pantalla y perder datos. Para evitarlo y mejorar la experiencia de usuario, SAP proporciona una solución estándar muy utilizada: POPUP_TO_CONFIRM.

¿Qué es POPUP_TO_CONFIRM?

POPUP_TO_CONFIRM es un módulo de función estándar de SAP que muestra un diálogo modal de confirmación y devuelve la decisión del usuario. Es el típico popup que pregunta ‘¿estás seguro de que quieres salir?’. Y botones como Sí / No / Cancelar.

CaracterísticaDescripción
ModalBloquea la pantalla hasta que el usuario responde
InteractivoEspera la decisión del usuario
PersonalizablePuedes cambiar textos, títulos, número de botones
RetornoDevuelve un código con la respuesta del usuario

Valores de retorno

ValorSignificadoBotón asociado
'1'Botón 1 (normalmente «Sí»)Primer botón
'2'Botón 2 (normalmente «No»)Segundo botón
'A'CancelarBotón de cancelar (si está activado)

Este valor es el que debes usar en tu lógica.

DATA lv_answer TYPE c. 

CALL FUNCTION 'POPUP_TO_CONFIRM' 
  EXPORTING titlebar = 'Confirmación' 
            text_question = '¿Desea salir sin guardar los cambios?'     
            text_button_1 = 'Sí' 
            text_button_2 = 'No' 
            display_cancel_button = 'X' 
            popup_type  = 'ICON_MESSAGE_WARNING'
  IMPORTING answer = lv_answer. 

Explicación de parámetros

ParámetroDescripciónValores típicos
titlebarTítulo de la ventana'Confirmación', 'Atención'
text_questionTexto de la preguntaCualquier string
text_button_1Texto primer botón'Sí', 'Aceptar', 'Guardar'
text_button_2Texto segundo botón'No', 'Cancelar'
text_button_3Texto tercer botón (opcional)'Quizás', 'Más tarde'
cancel_displayMuestra botón Cancelar'X' para mostrar
display_cancel_buttonAlternativa al anterior'X' para mostrar
default_buttonBotón que se activa con Enter'1', '2', '3', 'A'
popup_typeIcono que se muestraEj: 'ICON_MESSAGE_WARNING'

En un caso real podemos utilizarlo de la siguiente manera:

CASE sy-ucomm. 
  WHEN 'BACK' OR 'EXIT'. 
     IF gv_changed = abap_true. 
        CALL FUNCTION 'POPUP_TO_CONFIRM' 
             EXPORTING titlebar = 'Confirmación' 
                       text_question = '¿Desea salir sin guardar los cambios?'  
             IMPORTING answer = DATA(lv_answer). 
        IF lv_answer = '1'. 
           LEAVE PROGRAM.
        ENDIF. 
     ELSE.  
       LEAVE PROGRAM. 
     ENDIF. 
ENDCASE.

Buenas prácticas

  • Usa constantes para los valores de retorno. En lugar de comparar con '1', '2', etc., define constantes que den significado.
CONSTANTS:
  c_answer_yes   TYPE c VALUE '1',
  c_answer_no    TYPE c VALUE '2',
  c_answer_cancel TYPE c VALUE 'A'.

IF lv_answer = c_answer_yes.
  " Proceder con la acción
ENDIF.
  • Usa popup_type para dar contexto visual
" Para acciones destructivas
popup_type = 'ICON_MESSAGE_WARNING'

" Para preguntas normales
popup_type = 'ICON_MESSAGE_QUESTION'

" Para información
popup_type = 'ICON_MESSAGE_INFORMATION'
  • Verifica siempre si hay cambios antes de preguntar
IF gv_changed = abap_true.
  " Solo preguntar si hay cambios pendientes
  CALL FUNCTION 'POPUP_TO_CONFIRM' ...
ELSE.
  " No hay cambios, salir directamente
  LEAVE PROGRAM.
ENDIF.
  • Nunca hardcodees los textos, pues no se podrán traducir a otros idiomas. Mejor usa una clase de mensajes o elementos de texto.
CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
    titlebar      = text-001
    text_question = text-002
  IMPORTING
    answer        = lv_answer.

POPUP_TO_CONFIRM es una herramienta pequeña pero fundamental en el desarrollo ABAP clásico con dynpros. No es compleja, pero usarla correctamente marca la diferencia entre una aplicación que «funciona» y una aplicación que cuida al usuario.