Logali Training
¿Cómo solicitar/liberar la actualización de una tabla en SAP utilizando un objeto de bloqueo?

¿Cómo solicitar/liberar la actualización de una tabla en SAP utilizando un objeto de bloqueo?

Para esta lección utilizamos el objeto de bloqueo EZ_FACT_LOGALI creado en el tutorial ¿Cómo crear un objeto de bloqueo en SAP?

Cada objeto de bloqueo lleva asociado dos módulos de funciones con la nomenclatura DEQUEUE_NOMBRE_OBJETO_BLOQUEO y ENQUEUE_NOMBRE_OBJETO_BLOQUEO que nos permiten solicitar y liberar el bloqueo sobre la tabla.

  1. Para ver los módulos de funciones creados entramos en el diccionario de datos, transacción SE11, visualizando el objeto de bloqueo y navegamos en el menú en Pasar a Módulo bloqueo.

  1. En la transacción SE38 – Editor ABAP creamos un programa ejecutable donde implementamos la lógica que solicita/libera el bloqueo.

3. Primero solicitamos el bloque llamando al módulo de funciones.

Existen los siguientes tipos de bloqueo que se pueden pasar al primer parámetro del módulo de funciones:

  • E Bloqueo escritura
  • S Bloqueo lectura
  • X Bloqueo escrit.ampliado
  • O Fijar bloqueo optimista
  • R Promover bloqueo optimista, conversión de «O» a «E»
  • U Sólo verif.colisión, bloqueo escritura ampliado, como en «X»
  • V Sólo verif.colisión, bloqueo de escritura, como en «E»
  • W Sólo verificación colisión, bloqueo de lectura, como en «S»
  • C Sólo verificación promoción, bloqueo optimista, como en «R»
  • T Reservado
  • + Reservado

Con el segundo parámetro MANDT podemos bloquear la inserción de registros por mandante, porque la tabla es dependiente de mandante y contiene el campo MANDT.

Dependiendo de los campos que forman la clave de la tabla de base de datos (el objeto que se bloquea), el módulo de funciones contendrá tantos parámetros que los campos clave. En este caso el único campo clave FACTURA (sin contar el campo MANDT que también es clave). Con esto podemos bloquear la tabla a nivel de registro y no permitimos crear una inserción con el mismo número de factura.

  1. Después de haber solicitado el bloqueo implementamos toda la lógica de la aplicación que se va ejecutar mientras tenemos la tabla bloqueada en modo escritura. Para este ejemplo insertamos sólo un registro en la tabla, normalmente la lógica que se implementa es mucha más amplia con navegación entre varias pantallas, etc.

  1. Cuando terminamos con la lógica tenemos que liberar el bloqueo. Es un paso muy importante, no podemos dejar bloqueada la tabla cuando el usuario termina de utilizar la aplicación. Por eso llamamos al módulo de funciones que nos permite liberar el bloqueo.

  1. El código entero del programa es:

2 comentarios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

  • Buenas tardes,
    Intento hacer un bloqueo de una línea de la tabla Z (no de toda la tabla) y al usar estas funciones se bloquea la tabla al completo y al pasar por la función de desbloquear no se desbloquea tampoco.

    ¿Me puedes orientar? Gracias de antemano

    • Hola Elena,

      ¿Qué tipo de bloqueo tienes en el objeto de bloqueo?

      A continuación, te dejo la documentación oficial referente a este tema:
      Exclusive Locks

      The locked data can be displayed or edited by one user only. Requests for either another exclusive lock or a shared lock are rejected.

      Shared Lock

      Several users have simultaneous read access to the same data. However, as soon as any one user processes the data, a second user does not have any access to this data. Requests from further shared locks are accepted, even if they are from different users. Exclusive locks are rejected.

      Exclusive but not cumulative lock

      Whereas exclusive locks can be requested several times by the same transaction and released one by one, an exclusive, non-cumulative lock can only be requested once by the same transaction. Each further lock request will be rejected.

      Optimistic Lock (O):

      Optimistic locks initially behave like shared locks and can be converted into exclusive locks.

      Promote Optimistic Lock (R):

      Converts an optimistic lock into an exclusive lock.

      Collision check / Promotion check (‘U’, ‘V’, ‘W’, ‘C’)

      Checks whether one of the respective locks (‘E’, ‘S’, ‘X’, ‘O’) is possible, but does not set a lock

      Un saludo.

Cursos Destacados

Síguenos

Si desea estar informado de nuestros nuevos cursos, obtener promociones o desea recibir algún tipo de información.