✒️ABAP La lógica de procesamiento en el PAI y la ejecución de las acciones
ABAP La lógica de procesamiento en el PAI y la ejecución de las acciones
1 | Ejecución condicionada de módulos
Si especificamos la cláusula ON INPUT después de MODULE en una instrucción FIELD,
el módulo es ejecutado solamente si el campo en cuestión contiene un valor diferente al valor inicial.
PROCESS AFTER INPUT.
FIELD WA_SCREEN_0100-DNI MODULE USER_COMMAND_0100_DNI.
Imagen 1.1 - La cláusula ON INPUT
En la sentencia CHAIN-ENDCHAIN se debe usar la instrucción ON CHAIN-INPUT. Entonces, el módulo es procesado solamente si al
menos uno de los campos de la pantalla en la sentencia CHAIN-ENDCHAIN contiene un valor diferente al valor inicial.
Imagen 1.2 - La instrucción ON CHAIN-INPUT
Se puede usar la adición ON INPUT solamente si la instrucción MODULE es especificada dentro de una instrucción FIELD.
Si se especifica la cláusula ON REQUEST después de MODULE en una instrucción FIELD,
el módulo es ejecutado únicamente si el campo tiene una nueva entrada.
PROCESS AFTER INPUT.
FIELD WA_SCREEN_0100-DNI
MODULE USER_COMMAND_0100_DNI ON REQUEST.
Imagen 1.3 - La cláusula ON REQUEST
En la sentencia CHAIN-ENDCHAIN, se debe usar la instrucción ON CHAIN-REQUEST. Entonces, el módulo concerniente
es procesado solamente si al menos uno de los campos de pantalla de la sentencia CHAIN-ENDCHAIN tiene una nueva entrada.
Imagen 1.4 - La instrucción ON CHAIN-REQUEST
Se puede usar la adición ON REQUEST solamente si la instrucción MODULE es especificada dentro de una instrucción FIELD.
Es posible que en alguna ocasión el usuario quiera salir de la pantalla sin necesidad de pasar las validaciones automáticas.
Por ejemplo utilizando las funciones estándares BACK , EXIT o CANCEL . En este caso utilizaremos la cláusula AT EXIT-COMMAND
de la instrucción MODULE. La sintaxis a utilizar es la siguiente:
MODULE EXIT_0100 AT EXIT-COMMAND.
Imagen 1.5 - La cláusula AT EXIT-COMMAND
MODULE exit_0100 INPUT.
LEAVE PROGRAM.
ENDMODULE.
Imagen 1.6 - La sentencia LEAVE PROGRAM
Para poder utilizar un AT EXIT-COMMAND en un botón de campo,
será necesario asignar el valor E en el atributo de campo Tipo función del editor de pantallas.
En el módulo que llamamos incluiremos las instrucciones necesarias para poder salir de la transacción o de la pantalla en proceso.
Por ejemplo: LEAVE TO SCREEN 0.
Imagen 1.7 - La sentencia LEAVE TO SCREEN 0 vuelve a la pantalla inicial
2 | Tratamiento de los códigos de función
Cuando el usuario de una transacción de diálogo pulsa una tecla de función, un punto de menú, un pushbutton,
un ícono o simplemente la tecla ENTER, los datos introducidos en la pantalla se pasan a los módulos definidos en el PAI
para ser procesados junto a un código de función que indicará que función ha solicitado el usuario.
Recordemos que cuando definimos una dynpro creamos el campo de tipo código de función denominado OK_CODE.
En la lógica de procesamiento de cada dynpro, tendremos que realizar al tratamiento del OK_CODE.
Para ello, utilizaremos el módulo USER_COMMAND que deberá ser el último del evento PAI,
es decir que se ejecutará una vez que todos los datos de entrada han sido validados correctamente.
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
FIELD WA_SCREEN_0100-DNI
MODULE USER_COMMAND_0100_DNI ON REQUEST.
MODULE EXIT_0100 AT EXIT-COMMAND.
MODULE USER_COMMAND_0100.
Imagen 2.1 - El module USER_COMMAND
Una vez procesado el módulo de función, borraremos el contenido del OK_CODE, inicializándolo para la próxima dynpro.
Podemos guardar el contenido del OK_CODE en una variable intermedia e inicializarlo inmediatamente.
MODULE user_command_0100 INPUT.
MOVE ok_code TO v_ucomm.
CLEAR ok_code.
CASE v_ucomm.
WHEN 'BORRAR_DNI'.
CLEAR wa_screen_0100-dni.
ENDCASE.
ENDMODULE.
Imagen 2.2 - La lógica de procesamiento del USER_COMMAND
El tipo de la variable V_UCOMM es el siguiente:
DATA: v_ucomm TYPE sy-ucomm.
Imagen 2.3 - La variable V_UCOMM del tipo SY-UCOMM
3 | Secuencia dinámica de las pantallas
En un programa de diálogo o también llamado transacción de diálogo podemos controlar la secuencia de
ejecución de cada una de las dynpros que componen a la transacción.
Imagen 3.1 - Control de la secuencia de ejecución de las dynpros con CALL SCREEN y SET SCREEN
Existen dos instrucciones que nos permitirán pasar a otra dynpro existente dentro del mismo programa.
La primera de ellas es la instrucción SET SCREEN que tiene la siguiente sintaxis:
SET SCREEN 0100.
Imagen 3.2 - Sintaxis de la sentencia SET SCREEN
La instrucción SET SCREEN reescribe temporalmente la siguiente pantalla a procesar.
La pantalla siguiente debe ser una pantalla del mismo Module Pool.
Imagen 3.3 - Lógica de procesamiento de la SET SCREEN
La pantalla siguiente es procesada después de procesar la pantalla actual o al menos que se termina la ejecución de la pantalla
actual con la instrucción LEAVE SCREEN. Al encontrar esta instrucción, se ejecuta la pantalla siguiente en forma inmediata.
Si se desea terminar el procesamiento de la pantalla actual e ir directamente a la pantalla siguiente en una sola instrucción,
se puede usar la sentencia LEAVE TO SCREEN tal como vemos a continuación.
Imagen 3.4 - Sintaxis de la sentencia LEAVE TO SCREEN
La instrucción CALL SCREEN interrumpe el procesamiento de la pantalla actual para procesar la pantalla X y las pantallas subsecuentes.
Imagen 3.5 - La sentencia CALL SCREEN
La pantalla llamada con esta instrucción deberá ser una pantalla del mismo Module Pool.
Cualquiera de las instrucciones: SET SCREEN 0, LEAVE SCREEN, LEAVE TO SCREEN 0,
regresa el control al lugar donde fue ejecutada la instrucción CALL SCREEN.
Si se usa cualquiera de las instrucciones anteriores cuando no se esta en el modo de llamada,
es decir cuando no se cedió el control a otra dynpro del programa, entonces el programa termina.
Usando las cláusulas STARTING AT y ENDING AT en la instrucción CALL SCREEN,
se puede especificar la posición y el tamaño de la pantalla a llamar. Veamos el siguiente ejemplo:
CALL SCREEN 0200 STARTING AT 5 1 ENDING AT 130 25.
Imagen 3.6 - Ejemplo de la utilización de las cláusulas STARTING AT y ENDING AT
Si la pantalla aparece incompleta, se incluye en la misma una barra de desplazamiento.
Imagen 3.7 - La barra de desplazamiento de una dynpro
 
 
 
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