Cómo rellenar un desplegable (dropdown) en un campo de una screen

Cuando trabajamos con screens (dynpros) en ABAP, es muy común necesitar que un campo tipo dropdown muestre una lista concreta de valores: estados, tipos, opciones fijas, etc.

Aunque en el Diccionario de Datos podemos definir valores fijos en dominios, en muchos casos necesitamos controlar dinámicamente qué valores aparecen en el desplegable. Para eso existe la función estándar VRM_SET_VALUES.

VRM_SET_VALUES es un módulo de función estándar de SAP que permite asignar, en tiempo de ejecución, los valores que aparecerán en un campo tipo dropdown (listbox) dentro de una screen.

Requisitos previos en la screen

Antes de usar VRM_SET_VALUES, el campo de la screen debe cumplir esto:

  1. El campo debe ser un Listbox (Dropdown)
    • En el Screen Painter, en las propiedades del campo
    • Campo type Dropdown = Listbox
  2. El campo debe tener un nombre técnico, por ejemplo:
    • P_STATUS
    • GV_TYPE
    • SCREEN_FIELD

Ese nombre será el ID que usaremos en la función.

Estructura básica de VRM_SET_VALUES

La función recibe dos parámetros importantes:

  • ID → nombre del campo de la screen (entre comillas)
  • VALUES → tabla interna con los valores del desplegable

CALL FUNCTION 'VRM_SET_VALUES'
  EXPORTING
    id     = 'FIELD_NAME'
    values = lt_values_tab.

La tabla interna debe ser de tipo VRM_VALUES, que contiene:

  • KEY → valor técnico
  • TEXT → texto que ve el usuario

Ejemplo completo paso a paso

1️⃣ Declarar la tabla de valores


DATA: lt_values TYPE vrm_values,
      ls_value  TYPE vrm_value.


2️⃣ Rellenar los valores del dropdown


ls_value-key  = 'A'.
ls_value-text = 'Activo'.
APPEND ls_value TO lt_values.

ls_value-key  = 'I'.
ls_value-text = 'Inactivo'.
APPEND ls_value TO lt_values.

3️⃣ Llamar a VRM_SET_VALUES


CALL FUNCTION 'VRM_SET_VALUES'
  EXPORTING
    id     = 'P_STATUS'
    values = lt_values.

¿Dónde se suele llamar a esta función?

Normalmente se llama en:

  • PBO (Process Before Output)
  • MODULE status_XXXX OUTPUT

Ejemplo típico:

MODULE set_dropdown OUTPUT.
  PERFORM fill_dropdown.
ENDMODULE.

Y dentro del FORM llamas a VRM_SET_VALUES.

👉 Esto asegura que el dropdown se cargue antes de que la screen se muestre.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *