Introducción:
En esta publicación del blog, intentaré darte una breve idea sobre LUW (Unidad Lógica de Trabajo).
Básicamente, es el tiempo requerido para que el sistema complete el proceso de modificación de datos de la base de datos (DB). Ya sea completando todos los cambios realizados en los datos de la DB o revirtiéndolos. El propósito principal de LUW es garantizar la consistencia de los datos en el sistema.
Hay dos tipos de LUW disponibles:
1. LUW de Base de Datos
2. LUW de SAP
1. LUW de Base de Datos:
Las LUW consisten en varias operaciones de base de datos como Insertar, Actualizar, Eliminar y Modificar datos que realizan cambios a nivel de base de datos. Se utiliza para mantener la consistencia de los datos.
A continuación se presenta una lista de puntos en los que comienzan y terminan las LUW de base de datos.
La LUW de Base de Datos Comienza
-
Cada vez que comienza un paso de diálogo (cuando el paso de diálogo se envía al proceso de trabajo).
-
Siempre que la LUW de base de datos anterior termina en una confirmación de base de datos.
-
Siempre que la LUW de base de datos anterior termina en un rollback de base de datos.
La LUW de Base de Datos Termina
-
Cada vez que ocurre una confirmación de base de datos. Esto escribe todos los cambios en la base de datos.
-
Cada vez que ocurre un rollback de base de datos. Esto revierte todos los cambios realizados durante la LUW.
2. LUW de SAP:
A diferencia de una LUW de base de datos, una LUW de SAP puede abarcar múltiples pasos de diálogo y ejecutarse utilizando una serie de diferentes procesos de trabajo. Si una LUW de SAP contiene cambios en la base de datos, debes escribir todos ellos o ninguno en la base de datos. Para garantizar que esto suceda, debes incluir una confirmación de base de datos cuando tu transacción haya finalizado con éxito, y un rollback de base de datos en caso de que el programa detecte un error.
Sin embargo, dado que los cambios en la base de datos de una LUW de base de datos no pueden revertirse en una LUW de base de datos posterior, debes realizar todos los cambios en la base de datos para la LUW de SAP en una única LUW de base de datos. Para mantener la integridad de los datos, debes agrupar todos tus cambios en la base de datos en la última LUW de base de datos de la LUW de SAP.
La técnica de agrupamiento de cambios en la base de datos dentro de una LUW de SAP garantiza que aún puedas revertirlos. También significa que puedes distribuir una transacción en más de un proceso de trabajo.
A continuación se presentan las diversas técnicas de agrupamiento utilizadas en SAP:
1. Agrupamiento utilizando módulos de función (actualización)
La instrucción CALL FUNCTION ... IN UPDATE TASK se utiliza para registrar un módulo de función de actualización para su ejecución posterior en un proceso de trabajo de actualización (actualización síncrona y asíncrona) o en el proceso de trabajo actual (actualización local).
2. Agrupamiento utilizando módulos de función (RFC transaccional)
La instrucción CALL FUNCTION ... IN BACKGROUND TASK se utiliza para registrar un módulo de función habilitado para acceso remoto para su ejecución posterior de forma asíncrona en segundo plano y a través de la interfaz RFC (RFC transaccional).
Nota
Un módulo de función puede especificarse como un módulo de función de actualización o habilitado para acceso remoto, pero no ambos al mismo tiempo. La actualización se utiliza para realizar LUW de SAP dentro de AS ABAP, mientras que el RFC transaccional crea LUW en sistemas distribuidos.
-
Agrupamiento utilizando subrutinas
La instrucción PERFORM ... ON COMMIT se utiliza para registrar una subrutina para su ejecución posterior en un proceso de trabajo diferente.
Ejemplo:
Consideremos que estamos intentando guardar datos a través de varias funciones, estamos completando la creación de datos en la base de datos pero para actualizar la base de datos explícitamente se requiere un commit de trabajo, de lo contrario debemos usar un rollback para revertir el cambio ocurrido a nivel de base de datos.
DATA(values) = VALUE demo_update_tab( ).
EXPORT values = values TO MEMORY ID 'DEL'.
PERFORM delete ON COMMIT.
WAIT UP TO 1 SECONDS. "<--- Roll-out/Roll-in con confirmación de base de datos
values = VALUE #(
( id = 'X' col1 = 100 col2 = 200 col3 = 300 col4 = 400 )
( id = 'Y' col1 = 110 col2 = 210 col3 = 310 col4 = 410 )
Pedro Pascal
Se unió el 07/03/2018