Está en la página 1de 16

SAP ABAP Programación

Utilidades

TEORÍA
Utilidades
SAP ABAP Programación

1
SAP ABAP Programación
Utilidades

Contents
I. Objeto de bloqueo………………………………………………………………………………………………..…….3
II. Solicitar/liberar la actualización de una tabla utilizando un objeto de bloqueo…………8
III. Activar tablas de base de datos que no se pueden activar en SE11…………………….……13

2
SAP ABAP Programación
Utilidades

I. Objeto de bloqueo
Un objeto de bloqueo es una unión virtual de varias tablas SAP que
sincroniza el acceso simultáneo de dos usuarios al mismo set de datos.

La solicitud y/o la liberación de los bloqueos se realizan en la programación


de las transacciones de diálogo mediante la llamada de determinados
módulos de funciones que se generan automáticamente de la definición de
los objetos de bloqueo. Estos objetos deben crearse explícitamente en el
diccionario de datos ABAP, transacción SE11.

Para crear un objeto de bloqueo debemos seguir los siguientes pasos:

1. Definir un objeto de bloqueo en el Dictionary ABAP cuyo nombre


debe empezar con E.

2. Incluir los módulos de funciones para la solicitud y/o liberación de


bloqueos en la programación de las transacciones de diálogo
correspondientes. Los módulos se crearán automáticamente al
activar el objeto de bloqueo.

En el siguiente ejemplo crearemos el objeto de bloqueo EZ_FACT_LOGALI


que se utilizará para bloquear en modo escritura la tabla de base de datos
ZFACT_LOGALI creada en la sección tablas de base de datos.

1. En la transacción SE11 del diccionario de datos ABAP creamos el


objeto de bloqueo EZ_FACT_LOGALI.

2. Rellamos el campo obligatorio Descripción breve. En la misma


pestaña Atributos se puede convertir el módulo de funciones en un

3
SAP ABAP Programación
Utilidades

RFC (Remote Function Call) activando la opción Permitir RFC. Esta


opción permite que se realicen llamadas en remoto desde otros
sistemas SAP. En caso de su activación para un objeto de bloqueo
existente, debemos asegurarnos de que la llamada de los módulos de
funciones generados se efectúe con parámetros adecuados al tipo.
Antes de activar el objeto de bloqueo con la nueva opción, tenemos
que verificar todos los programas que utilizan los módulos de
funciones en cuestión. Para este ejemplo no se activa la opción
Permitir RFC.

3. En la pestaña Tablas añade la tabla de base de datos ZFACT_LOGALI


y seleccione la opción Bloqueo escritura.
4
SAP ABAP Programación
Utilidades

El modo de bloqueo especifica cómo se sincroniza el acceso de varios


usuarios a los registros de la tabla.

Son posibles los siguientes modos de bloqueo:

 Bloqueo de escritura

Los datos bloqueados sólo los puede leer o tratar un usuario. El


sistema rechazará tanto la solicitud de otro bloqueo de escritura
como de un bloqueo de lectura.

 Bloqueo de lectura

Varios usuarios pueden acceder simultáneamente en modo lectura a


los mismos datos. En cuanto un usuario trata los datos, un segundo
usuario no tendrá acceso a dichos datos. Se aceptarán las solicitudes
de otros bloqueos de lectura, aunque provengan de otros usuarios.
El sistema rechazará un bloqueo de escritura.

 Bloqueo de escritura ampliada

5
SAP ABAP Programación
Utilidades

Una misma transacción puede solicitar varias veces bloqueos de


escritura y volverlos a eliminar sucesivamente. Sin embargo, sólo
puede solicitar una única vez un bloqueo de lectura ampliado. El
sistema rechazará cualquier otra solicitud de bloqueo.

 Bloqueo optimista ("O"):

Los bloqueos optimistas se comportan como bloqueos de lectura y


pueden convertirse en bloqueos de escritura.

 Promover bloqueo optimista ("R")

Convierte un bloqueo optimista en un bloqueo de estructura.

 Verificación de colisión/Verificación de promoción ("U", "V",


"W", "C")

Verifica si es posible uno de los bloqueos correspondientes ("E", "S",


"X", "O"); sin embargo, no fija ningún bloqueo.

Aparte de la tabla bloqueada se pueden bloquear tablas secundarias


relacionadas con la tabla primaria que se bloquea. Para conseguirlo
debemos utilizar la opción del botón Añadir.

La tabla que se utiliza para esta práctica no tiene relaciones con otras
tablas, por lo tanto, se bloquea sólo la tabla indicada.

6
SAP ABAP Programación
Utilidades

4. Activamos el objeto de bloqueo asignando el paquete de desarrollo


y la orden de transporte. Al activar el objeto el sistema genera dos
módulos de funciones con la nomenclatura
DEQUEUE_NOMBRE_OBJETO_BLOQUEO y
ENQUEUE_NOMBRE_OBJETO_BLOQUEO que nos permitirán solicitar
y liberar el bloqueo sobre la tabla. Para ver los módulos de funciones
creados navegamos en el menú en Pasar aMódulo bloqueo.

5. Ya tenemos el objeto de bloqueo que se puede utilizar para bloquear


en modo escritura la inserción de los registros sobre la tabla de base
de datos.

7
SAP ABAP Programación
Utilidades

II. Solicitar/liberar la actualización de una tabla utilizando un


objeto de bloqueo

Cada objeto de bloqueo lleva asociados 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.
Para esta práctica se utiliza el objeto de bloqueo EZ_FACT_LOGALI creado
en la sección anterior.

1. Para ver los módulos de funciones asociados entramos en el


diccionario de datos, transacción SE11, visualizando el objeto de
bloqueo y navegando en el menú en Pasar aMódulo bloqueo.

8
SAP ABAP Programación
Utilidades

2. En la transacción SE38 – Editor ABAP creamos un programa


ejecutable donde se implementará la lógica que solicita/libera el
bloqueo.

9
SAP ABAP Programación
Utilidades

3. Para solicitar el bloque debemos llamar al módulo de funciones


ENQUEUE.

CALL FUNCTION 'ENQUEUE_EZ_FACT_LOGALI'


EXPORTING
mode_zfact_logali = 'E'
mandt = sy-mandt
* factura =
* x_factura = ' '
_scope = '2'
_wait = ' '
_collect = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.

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

10
SAP ABAP Programación
Utilidades

Con el segundo parámetro MANDT se pueden bloquear la inserción


de registros por mandante, porque la tabla es dependiente de
mandante y contiene el campo MANDT.
El módulo de funciones contendrá la misma cantidad de campos que
forman la clave de la tabla de base de datos (el objeto que se
bloquea), en este caso el único campo clave FACTURA (sin contar el
campo MANDT que también es clave). Con esto se puede conseguir
bloquear la tabla a nivel de registro y prohibir crear una inserción con
el mismo número de factura.

4. Después de haber solicitado que el bloqueo implemente toda la


lógica de la aplicación que se va ejecutar mientras la tabla está
bloqueada en modo escritura. Para este ejemplo se inserta un
registro en la tabla, normalmente la lógica que se implementa es
mucha más amplia con navegación entre varias pantallas, etc.

DATA gs_factura TYPE zfact_logali.

gs_factura-factura = '0000000001'.

INSERT zfact_logali FROM gs_factura.

5. Cuando se termina con la ejecución de la lógica debemos liberar el


bloqueo. Es un paso muy importante, no podemos dejar bloqueada
la tabla cuando se termina de ejecutar la aplicación. Para conseguirlo
llamamos al módulo de funciones DEQUEUE_EZ_FACT_LOGALI que
libera el bloqueo.

CALL FUNCTION 'DEQUEUE_EZ_FACT_LOGALI'


EXPORTING
mode_zfact_logali = 'E'
mandt = sy-mandt
* FACTURA =
x_factura = ' '
_scope = '3'
_synchron = ' '
_collect = ' '.

11
SAP ABAP Programación
Utilidades

6. El código entero del programa es:

REPORT zbloqueo_logali.

CALL FUNCTION 'ENQUEUE_EZ_FACT_LOGALI'


EXPORTING
mode_zfact_logali = 'E'
mandt = sy-mandt
* factura =
* x_factura = ' '
_scope = '2'
_wait = ' '
_collect = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

DATA gs_factura TYPE zfact_logali.


gs_factura-factura = '0000000001'.
INSERT zfact_logali FROM gs_factura.

CALL FUNCTION 'DEQUEUE_EZ_FACT_LOGALI'


EXPORTING
mode_zfact_logali = 'E'
mandt = sy-mandt
* FACTURA =
x_factura = ' '
_scope = '3'
_synchron = ' '
_collect = ' '.

12
SAP ABAP Programación
Utilidades

III. Activar tablas de base de datos que no se pueden


activar en SE11

A veces estamos obligados a modificar los tipos de datos disminuyendo la


longitud de los campos de una tabla. En este caso si la tabla tiene registros
el sistema no permite activar la tabla en la transacción SE11.
Evidentemente, en este caso es posible tener una pérdida de datos. Siendo
conscientes del impacto que puede tener sobre los datos se puede
proceder con la modificación de la tabla y con la activación.
Como caso práctico utilizamos el siguiente caso: La tabla ZFACT_LOGALI en
su campo FACTURA, que es clave, utiliza un elemento de datos que tiene en
su tipo de datos un CHAR con una longitud de 10 y estamos obligados a
modificar el tipo de datos disminuyendo la longitud a 2.

1. En el diccionario de datos SE11 entramos con la opción del botón


Modificar sobre la tabla indicada.

13
SAP ABAP Programación
Utilidades

2. Cambiamos el elemento de datos del campo FACTURA y asígnamos


otro con una longitud 2, que es menor a lo que había anteriormente,
e intente activar la tabla. El sistema nos indica que han ocurrido
errores durante la activación. Como podemos ver en el log de
activación es por la modificación de estructura a nivel de campo. En
este caso es imposible activar la tabla porque puede generar pérdida
de datos.

14
SAP ABAP Programación
Utilidades

3. El sistema SAP ofrece la transacción SE14 – Utilidad para base de


datos que permite gestionar estos casos. Rellenamos el campo
Objeto con el nombre de la tabla y seguimos utilizando la opción del
botón Tratar.

4. Entrando en la transacción podemos ver la opción de conservar los


datos. El sistema va a mapear los primeros dos caracteres al nuevo
campo por su longitud actual de 2. Lo que se recomienda es hacer
una copia entera de los datos que existen en la tabla antes de activar
la tabla, ya que por el corte (TRUNCATE) se perderán los datos de las
otras 8 posiciones.

15
SAP ABAP Programación
Utilidades

5. Ya tenemos la tabla activa. El mismo estado se puede ver en las dos


transacciones SE11 y SE14.

16

También podría gustarte