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:

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

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:

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:

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.
Página mantenida por Francisco A. Reyes