Commit Work

La sentencia COMMIT WORK ejecuta 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 COMMIT WORK.

  • SAP LUW – Logical Unit Work

Antes de utilizar la sentencia COMMIT WORK debe tener claro el concepto SAP LUW, que es una unidad lógica de trabajo, una secuencia relacionada de varias unidades de programación, cuya ejecución, por ejemplo, en pasos de diálogo o en llamadas de función remota, puede distribuirse a través de varios procesos de trabajo, pero sus cambios en la base de datos se actualizan dentro de una única base de datos LUW. Las SAP LUW se implementan mediante técnicas de agrupación, en las que las unidades de programación, como módulos de función de actualización o subrutinas, se registran en diferentes procesos de trabajo, pero se ejecutan mediante un único proceso de trabajo. Generalmente se inicia un SAP LUW abriendo una nueva sesión interna y termina cuando se ejecuta la sentencia Open SQL COMMIT WORK.

  • Sintaxis

COMMIT WORK [AND WAIT].

  • Efecto

La instrucción COMMIT WORK cierra el LUW SAP actual y abre uno nuevo. Todas las solicitudes de cambio de la LUW SAP actual se confirman. En este caso, COMMIT WORK realiza las siguientes acciones:

  • Ejecuta todas las subrutinas registradas usando PERFORM ON COMMIT. Las siguientes sentencias no se pueden ejecutar en una subrutina de este tipo:
  • PERFORM … ON COMMIT|ROLLBACK
  • COMMIT WORK
  • ROLLBACK WORK
  • Se puede ejecutar la sentencia CALL FUNCTION … IN UPDATE TASK.
  • Se activa un evento interno para el servicio de persistencia de los servicios de objetos.
  • Se desencadena el procesamiento de todos los módulos de función de actualización registrados utilizando CALL FUNCTION … IN UPDATE TASK en el proceso de trabajo de actualización. Dentro de un módulo de función de actualización que comenzó a utilizar COMMIT WORK, las sentencias que provocan un COMMIT en base de datos no se pueden ejecutar. En particular, se prohíben:
  • COMMIT WORK
  • ROLLBACK WORK
  • SUBMIT
  • CALL TRANSACTION
  • LEAVE TO TRANSACTION
  • CALL DIALOG
  • CALL SCREEN
  • Maneja todos los bloqueos SAP establecidos en el programa actual de acuerdo con el valor del parámetro formal _SCOPE de los módulos de función de bloqueo correspondientes.
  • Se desencadena un COMMIT en base de datos que también termina la base de datos actual LUW y cierra todos los cursores de base de datos.
  • Activa el evento TRANSACTION_FINISHED de la clase de sistema CL_SYSTEM_TRANSACTION_STATE. El parámetro KIND se establece en el valor de la constante CL_SYSTEM_TRANSACTION_STATE=>COMMIT_WORK.
  • Comportamiento de la variable de sistema SY-SUBRC

El COMMIT WORK siempre se actualiza con 0 cuando no se especifica AND WAIT.
Cuando se especifica AND WAIT:
– 0 cuando la actualización de la función de actualización se ejecutó con existo
– 4 cuando la actualización de la función de actualización no se ejecutó con existo

  • Aplicación práctica

En un programa ejecutable actualizamos el valor del campo CURRCODE = USD de la tabla de base de datos ZSCARRSA00001 para la compañía aérea BA – British Airways. La actualización la realizamos en base de datos antes de que termine la ejecución del programa y su unidad lógica de trabajo SAP – LUW asociada. Una vez actualizada la base de datos realizamos la lectura en base de datos obteniendo el mismo registro. Por último, muestramos en la salida el valor del campo CURRCODE del registro leído.

  1. Implementamos el código fuente.
  2. Ejecutamos el programa.
  • Consideraciones

Puntos para tener en cuenta cuando se ejecuta la sentencia COMMIT WORK:

  • Si el programa se ejecuta con batch input o si se ha llamado al programa utilizando la sentencia CALL TRANSACTION USING, el COMMIT WORK termina el proceso back input. Es su comportamiento por defecto.
  • En un programa llamado con CALL DIALOG el COMMIT WORK no inicializa el proceso para las subrutinas con PERFORM ON COMMIT o para los módulos de funciones CALL FUNCTION …..IN UPDATE TASK.
  • La sentencia COMMIT WORK no puede ser ejecutada en actualizaciones o durante la ejecución de las subrutinas registradas con PERFORM……COMMIT|ROLLBACK.
  • Artículos relacionados

ABAP Open SQL – ROLLBACK WORK

2 comentarios de “Commit Work

  1. Rafael dice:

    Tengo un problema con el método sent dentro de un programa impresor con bd lógica, me da dump por los commit del método.como puedo solucionar esto?

  2. Gheorghe dice:

    Hola. Tendrías que ver si estás ejecutando el código dentro de una unidad del estándar que no permite las instrucciones de commit. por ejemplo en un contexto RAP, o dentro de una BAPI, etc.

Deja una respuesta

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