Bloqueo en SAP R/3


En los sistemas de información en los que varios usuarios pueden estar trabajando simultaneamente sobre los mismos datos es necesario tener un sistema de control que garantice la integridad y consistencia de los datos.  En SAP R/3 este sistema de control se consigue por medio de los objetos de bloque, que se definen sobre los registros de las tablas.

Los bloqueos se establecen y liberan por medio a la llamada de funciones generadas automáticamente al momento de crear los objetos de bloqueo en el diccionario ABAP. Este sistema de sincronización es independiente del que posee el propio Gestor de Base de Datos( DBMS ).

La forma en la que se crea un objeto de bloqueo en SAP R/3 es la siguiente:

1.- Un objeto de bloque es del tipo aggregate
2.- Para crear un objeto de bloqueos se siguen los pasos siguientes
2.1.- Se definen los atributos del objeto de bloqueo
2.2.- Se seleccionan las tablas secundarias, si fuera necesario.
2.3.- Seleccionar los argumentos y tipos de bloqueos
2.4.- Activar el objeto de bloqueo

Para ver la aplicación de estos pasos se creará el objeto de bloqueo EZUAX1. Para nombrar los objetos de bloqueo se usa normalmente los primeros dos caracteres EZ o EY. Para trabajar con los objetos de bloqueo se sigue la ruta:

.- Herramientas
.- Workbench ABAP
.- Diccionario ABAP

Al recorrer esta ruta se presenta la pantalla siguiente:

imgBloque01.jpg (189353 bytes)

 

 

 

 

 

 

 

 

 

 

 

 



Si se pulsa el botón Crear aparece la imagen siguiente:

imgBloque02.jpg (189353 bytes)

 

 

 

 

 

 

 

 

 

 

 

 

Si se marca el indicador permitir RFC se podrán llamar las funciones generadas mediante RFC. Al nivel en que nos encontramos podemos guardar los cambios y posteriormente seleccionar el botón tablas, desde donde se pasa a la pantalla:

imgBloque03.jpg (189353 bytes)

 

 

 

 

 

 

 

 

 

 

 

 


Desde esta pantalla se puede:

.- Seleccionar una tabla secundaria
.- Seleccionar los campos del objeto de bloqueo

Las tablas secundarias solo tienen sentido cuando existen relaciones de claves externas con otros tablas, la tabla TABNA no tiene este tipo de relaciones.

La segunda opción consiste en establecer los argumentos de bloqueo para el objeto, estos argumentos los usarán los procesos de encolamiento de SAP R/3 para establecer el mecanismo de bloqueo. Al asignar valores a estos campos es como se define la granularidad del mecanismo de bloqueo. SAP R/3 puede bloquear objetos al nivel de registros.

Para definir el argumento de bloqueo use el botón de comandos campos y defina los campos que determinarán el dominio que se desea bloquear. Lo más posible es que se seleccionen todos los campos que conforman la clave primario del objeto a bloquear.

Una vez seleccionados los argumentos de bloqueo se procede a definir el tipo de bloqueo que se quiere aplicar, para esto se usa el botón Modo Bloqueo. Después de pulsar este botón aparece la pantalla siguiente:

imgBloque04.jpg (189353 bytes)

 

 

 

 

 

 

 

 

 

 

 

 


Sobre esta pantalla se ve que las posibles alternativas son:

.- Bloqueo de escritura( Exclusivo )
.- Bloqueo de lectura( Compartido )
.- Bloqueo de escritura ampliado( Exclusivo no acumulativo )

Exclusivo:

Los datos bloqueados solo podrán ser vistos o modificados por un único usuario, quien es el propietario de los datos bloqueados. Cualquier otro intento de acceder los datos bloqueados será impedido.

Compartido:

Varios usuarios podrán acceder a los datos simultaneamente, pero solo en modalidad de visualización y solo el primero podrá hacerlo en modalidad de actualización.

Exclusivo no acumulativo:

Es similar al Exclusivo, pero con la diferencia de que no se permite un bloqueo sobre otro anteriormente establecido.
Cuando se produce una llamada a un bloque se registra una entrada en la tabla de bloqueos de SAP R/3.
Finalmente debe activarse el objeto que se acaba de crear, esto se hace sobre el botón Activar. Después de activar el objeto es conveniente visualizar el log de activación, esto se hace por medio de la ruta:

.- Utilidades
.- Log. Activación

En este caso note la generación de los módulos de función para encolado y desencolado. Los módulos generados son:

.- ENQUEUE_EZUAX1
.- DEQUEUE_EZUAX1

Estas funciones pueden ser invocadas desde transacciones o módulos ABAP. La función ENQUEUE se usa para establecer el bloque, mientras que DEQUEUE se usa para liberar el bloqueo.

FUNCTION ENQUEUE_EZUAX1.
*"----------------------------------------------------------------------
*"*'Interfase local
*" IMPORTING
*" VALUE(MODE_TABNA) LIKE DD26E-ENQMODE DEFAULT 'E'
*" VALUE(COUNTRY) LIKE TABNA-COUNTRY OPTIONAL
*" VALUE(ID) LIKE TABNA-ID OPTIONAL
*" VALUE(X_COUNTRY) DEFAULT SPACE
*" VALUE(X_ID) DEFAULT SPACE
*" VALUE(_SCOPE) DEFAULT '2'
*" VALUE(_WAIT) DEFAULT SPACE
*" VALUE(_COLLECT) LIKE DDENQ_LIKE-COLLECT DEFAULT ' '
*" EXCEPTIONS
*" FOREIGN_LOCK
*" SYSTEM_FAILURE
*"----------------------------------------------------------------------
* Mód.func.generado p.obj.bloqueo EZUAX1
* Prohibido modificar o copiar este módulo de funciones
* Para informaciones concepto bloqueo SAP, consultar Ayuda ABAP/4
* para palabra clave 'ENQUEUE'
data: __seqta_tab like seqta occurs 1 with header line,
__scope like ddenq_like-scope,
__wait like ddenq_like-waitflag.
__wait = _wait.
__scope = _scope.
data: begin of %a_TABNA,
* Argumento bloqueo p.tabla TABNA
COUNTRY like TABNA-COUNTRY,
ID like TABNA-ID,
end of %a_TABNA.
* Inicializar argumento de bloqueo:
call 'C_ENQ_WILDCARD' id 'HEX0' field %a_TABNA.
* Asignación de parámetros bloq.a campos bloqueo
if not COUNTRY is initial or
not x_COUNTRY is initial.
move COUNTRY to:
%a_TABNA-COUNTRY.
endif.
if not ID is initial or
not x_ID is initial.
move ID to:
%a_TABNA-ID.
endif.
* Rellenar tabla bloqueo:
__seqta_tab-gname = 'TABNA'.
__seqta_tab-gmode = mode_TABNA.
__seqta_tab-garg = %a_TABNA.
append __seqta_tab.
* Fijar bloqueo
perform send_enqueue(saplsena)
tables __seqta_tab
using '1' __scope __wait ' ' 'EZUAX1' _collect.
ENDFUNCTION.


FUNCTION DEQUEUE_EZUAX1.
*"----------------------------------------------------------------------
*"*'Interfase local
*" IMPORTING
*" VALUE(MODE_TABNA) LIKE DD26E-ENQMODE DEFAULT 'E'
*" VALUE(COUNTRY) LIKE TABNA-COUNTRY OPTIONAL
*" VALUE(ID) LIKE TABNA-ID OPTIONAL
*" VALUE(X_COUNTRY) DEFAULT SPACE
*" VALUE(X_ID) DEFAULT SPACE
*" VALUE(_SCOPE) DEFAULT '3'
*" VALUE(_SYNCHRON) DEFAULT SPACE
*" VALUE(_COLLECT) LIKE DDENQ_LIKE-COLLECT DEFAULT ' '
*"----------------------------------------------------------------------
* Mód.func.generado p.obj.bloqueo EZUAX1
* Prohibido modificar o copiar este módulo de funciones
* Para informaciones concepto bloqueo SAP, consultar Ayuda ABAP/4
* para palabra clave 'ENQUEUE'
data: __seqta_tab like seqta occurs 1 with header line,
__scope like ddenq_like-scope,
__synchron like ddenq_like-synchron.
__synchron = _synchron.
__scope = _scope.
data: begin of %a_TABNA,
* Argumento bloqueo p.tabla TABNA
COUNTRY like TABNA-COUNTRY,
ID like TABNA-ID,
end of %a_TABNA.
* Inicializar argumento de bloqueo:
call 'C_ENQ_WILDCARD' id 'HEX0' field %a_TABNA.
* Asignación de parámetros bloq.a campos bloqueo
if not COUNTRY is initial or
not x_COUNTRY is initial.
move COUNTRY to:
%a_TABNA-COUNTRY.
endif.
if not ID is initial or
not x_ID is initial.
move ID to:
%a_TABNA-ID.
endif.
* Rellenar tabla bloqueo:
__seqta_tab-gname = 'TABNA'.
__seqta_tab-gmode = mode_TABNA.
__seqta_tab-garg = %a_TABNA.
append __seqta_tab.
* Fijar bloqueo
perform send_enqueue(saplsena)
tables __seqta_tab
using '2' __scope ' ' __synchron 'EZUAX1' _collect.
ENDFUNCTION.


 

Regresar a mi HomePage

Página mantenida por Francisco A. Reyes