✒️ABAP La lógica de procesamiento en el PBO
ABAP La lógica de procesamiento en el PBO
1 | Creación de Módulos
En la flujo de la lógica de una dynpro utilizamos módulos para realizar el procesamiento.
De aquí viene el hecho que a los programas de diálogo se los denomine Module Pool.
Para llamar a un módulo utilizaremos la sentencia MODULE seguida del nombre del módulo tal como vemos a continuación:
MODULE STATUS_0100.
Imagen 1.1 - La sentencia module
Si seleccionamos un módulo con doble clic, el sistema creará las instrucciones MODULE - ENDMODULE
en el lugar donde le indiquemos tal como vemos a continuación:
MODULE status_0100 OUTPUT.
ENDMODULE.
Imagen 1.2 - Ventana de diálogo de creación de un module
Si creamos un módulo en el PBO, el código del mismo empezará con la sentencia MODULE OUTPUT.
MODULE USER_COMMAND_0100 INPUT.
ENDMODULE.
Imagen 1.3 - Creación de un module en el PBO
Si creamos un módulo en el PAI, el código del mismo comenzará con la sentencia MODULE INPUT.
Imagen 1.4 - Creación de un module en el PAI
2 | Código ABAP en el PBO de una dynpro
Utilizaremos el evento PBO para seleccionar todos los datos
y realizar las configuraciones que queremos que tomen efecto al momento en que se visualice la pantalla.
Esto puede incluir entre otras cosas cualquiera de las siguientes acciones:
Setear el Status GUI y los Títulos de la dynpro.
Modificar los atributos de los campos de la dynpro.
Inicializar o cargar campos de la pantalla con determinados valores.
A continuación veremos en detalle cada una de las acciones mencionadas.
3 | Seteo del Status GUI y de los Títulos
En el PBO es donde definiremos cual es el Status GUI y los títulos que se utilizarán en la dynpro.
Para ello, dentro del PBO de la dynpro 0100 de nuestro programa ZPRUEBA_DIALOGO
crearemos el módulo STATUS_0100 tal como vemos a continuación:
Imagen 3.1 - Creación de un module en el PBO para el status GUI y los títulos
Cuando creamos una dynpro ya viene creado pero comentado el módulo que se utilizará para configurar el status y el título de la dynpro.
Hacemos doble clic en el módulo y el sistema nos propondrá crearlo.
Imagen 3.2 - Ventana de diálogo de creación de un module
Contestaremos que sí y luego veremos la ventana de diálogo en donde elegiremos crear un include para almacenar el código del PBO.
Imagen 3.3 - Creamos un include para todos los modules del PBO
Es ampliamente recomendable crear un Include para almacenar todos los módulos
y subrutinas que utilizamos en la lógica de procesamiento del PBO.
Este mismo razonamiento aplica para el PAI y todas las declaraciones de datos que utilicemos en un programa de diálogo.
Luego veremos que el módulo tiene el siguiente código comentado.
Imagen 3.4 - Visualizamos el código comentado dentro del module
Utilizaremos la sentencia SET PF-STATUS para setear el Status GUI
y la sentencia SET TITLEBAR para setear el título correspondientes a la dynpro 0100 tal como vemos a continuación:
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100'.
SET TITLEBAR '0100'.
ENDMODULE.
Imagen 3.5 - Configuramos el status GUI y el título
En ciertas ocasiones al momento de setear un Status GUI podríamos no querer mostrar todos los botones del mismo.
Por ejemplo, en el Status GUI que vemos a continuación, existen los botones BOTON1, BOTON2 y BOTON3 tal como vemos:
Imagen 3.6 - Staus GUI que tiene 3 botones con los códigos BOTON1, BOTON2 y BOTON3
Si solo quisiéramos mostrar el BOTON1, tendríamos que agregar los códigos de los botones que no queremos mostrar a una tabla interna
del tipo SLIS_T_EXTAB y luego al momento de ejecutar la sentencia SET PF-STATUS incluir esta tabla interna de la siguiente manera:
Imagen 3.7 - Agregamos los botones que excluimos a la tabla interna
Recordemos que para utilizar las estructuras SLIS tendremos que agregar el TYPE-POOLS SLIS.
4 | Modificación de los atributos de los campos de la pantalla
Los elementos que componen a una dynpro están almacenados en la estructura SCREEN. La palabra SCREEN es una palabra reservada en ABAP.
La estructura SCREEN es inicializada con los campos definidos en el Screen Painter y con sus atributos cada vez que el módulo PBO es ejecutado.
La estructura de SCREEN es la siguiente:
Campo Descripción
SCREEN-NAME Nombre del campo
SCREEN-GROUP1 Grupo de modificación 1
SCREEN-GROUP2 Grupo de modificación 2
SCREEN-GROUP3 Grupo de modificación 3
SCREEN-GROUP4 Grupo de modificación 4
SCREEN-REQUIRED Campo obligatorio
SCREEN-INPUT Campo de entrada
SCREEN-OUTPUT Campo de salida
SCREEN-INTENSIFIED Campo intensificado
SCREEN-INVISIBLE Campo visible o no visible
SCREEN-LENGHT Longitud del campo
SCREEN-ACTIVE Campo activo
SCREEN-DISPLAY_3D Campo en 3D
SCREEN-VALUE_HELP Campo con ayuda de búsqueda
SCREEN-REQUEST Campo reservado para uso interno del sistema
Tabla 4.1 / La estructura de SCREEN
Activaremos o desactivaremos los atributos de los campos de la estructura SCREEN asignando valores 0 o 1.
Para almacenar los cambios realizados a los atributos utilizaremos la sentencia MODIFY SCREEN.
Veamos algunos ejemplos:
Si tenemos una dynpro con el campo de entrada/salida WA_SCREEN_0100-DNI como el siguiente:
Imagen 4.1 - Dynpro con un campo de entrada / salida y un botón
Y queremos hacer no visible al campo, crearíamos un módulo en el PBO con el siguiente código:
MODULE definir_atributos_0100 OUTPUT.
LOOP AT SCREEN.
IF screen-name EQ 'WA_SCREEN_0100-DNI'.
screen-invisible = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
Imagen 4.2 - Lógica para hacer no visible un campo de la pantalla
Vale mencionar que para que el campo sea visible el atributo INVISIBLE debe ser cero.
Si quisiéramos no permitir la entrada de datos en el campo WA_USUARIOS_100-DNI,
es decir convertirlo en un campo de salida, crearíamos un módulo en el PBO con el siguiente código:
MODULE definir_atributos_0100 OUTPUT.
LOOP AT SCREEN.
IF screen-name EQ 'WA_SCREEN_0100-DNI'.
screen-invisible = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
Imagen 4.3 - Lógica para no permitir la entrada de datos en un campo de la pantalla
Vale mencionar que para que el campo sea de entrada el atributo INPUT debe ser 1.
Si quisiéramos que el campo WA_USUARIOS-DNI sea obligatorio, crearíamos un módulo en el PBO con el siguiente código:
MODULE definir_atributos_0100 OUTPUT.
LOOP AT SCREEN.
IF screen-name EQ 'WA_SCREEN_0100-DNI'.
screen-required = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
Imagen 4.4 - Lógica para hacer obligatorio a un campo de la pantalla
5 | Cargar campos de una dynpro
Para cargar un campo, estructura o tabla interna con datos y luego mostrar dichos datos en una dynpro,
simplemente tendremos que asignar los datos a los campos de la dynpro en el PBO para que luego los mismos se vean reflejados en la pantalla.
MODULE cargar_valores_0100 OUTPUT.
WA_SCREEN_0100-DNI = 16462416.
ENDMODULE.
Imagen 5.1 - Asignación de datos a un campo de la pantalla
 
 
 
Sobre el autor
Publicación académica de Alex Francisco Lemos Collazos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alex Francisco Lemos Collazos
Profesión: Ingeniero en Sistemas - Colombia - Legajo: QS36A
✒️Autor de: 174 Publicaciones Académicas
🎓Cursando Actualmente: Master S/4HANA Material Management
🎓Egresado de los módulos:
- Máster Material Management en SAP S/4HANA LOGISTIC
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP SD Nivel Inicial