Rollback Work

La sentencia ROLLBACK WORK anula en una unidad lógica de programación (LUW) todas las sentencias Open SQL que realizan cambios en base de datos. Esta lección trata de explicarle todos los procesos que implica el uso de esta instrucción y cómo utilizar la sentencia ROLLBACK WORK.

  • Sintaxis

ROLLBACK WORK.

  • Efecto

Los cambios dentro de un SAP LUW pueden ser deshechos por la sentencia Open SQL – ROLLBACK WORK que cierra el SAP LUW actual y abre uno nuevo. Esto cancela todas las solicitudes de cambios hechas por el SAP LUW actual. Para ello, ROLLBACK WORK realiza las siguientes acciones:

  • Ejecuta todas las subrutinas registradas con PERFORM ON ROLLBACK.
  • Elimina los registros de todas las subrutinas registradas con PERFORM ON COMMIT.
  • Inicia un evento interno en los Objetos de servicio que garantiza que los atributos de los objetos persistentes se inicialicen.
  • Elimina todos los módulos de función de actualización registrados con CALL FUNCTION … IN UPDATE TASK de las tablas de base de datos y elimina todas las llamadas de función remotas transaccionales registradas con CALL FUNCTION … IN BACKGROUND TASK | UNIT de las tablas de base de datos de las tablas ARFCSSTATE y ARFCSDATA.
  • Elimina todos los bloqueos SAP establecidos en el programa actual para los que el parámetro formal _SCOPE del módulo de función de bloqueo se estableció en el valor 2.
  • Lanza un ROLL BACK en base de datos que también termina el LUW actual de base de datos.
  • Después de completar la instrucción ROLLBACK WORK, se activa el evento TRANSACTION_FINISHED de la clase de sistema CL_SYSTEM_TRANSACTION_STATE, con lo que el parámetro KIND tiene el valor de la constante CL_SYSTEM_TRANSACTION_STATE =>ROLLBACK_WORK.
  • Aplicación práctica

Ampliamos el programa creado en la lección COMMIT WORK  modificando la lógica del código fuente para que se realice la actualización en la base de datos con COMMIT WORK si se ejecuta el programa para la hora local del servidor en los minutos pares y que no se realice la actualización utilizando ROLLBACK WORK cuando los minutos son impares en la hora local del servidor (SY-TIMLO). Para comprobar si se ha actualizado o no la base de datos capturamos el evento TRANSACTION_FINISHED que levanta la clase estándar CL_SYSTEM_TRANSACTION_STATE.

  1. Implementamos el código fuente.
  2. Ejecutamos el programa. Dependiendo de que si los minutos son pares o impares se aplicará la lógica del COMMIT WORK o de ROLLBACK WORK.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.