Limitar Concurrencia en desarrollos Z

Buenos días a todos.

La presente, tal como lo indica el titulo, necesito limitar el acceso a un desarrollo que realizamos en casa para que no pueda editar (en este caso unas notas de entrega) mas de un usuario a la vez. El tema es que desarrollamos un sistema para embalaje de mercancía, pero no queremos que mas de un usuario trate el mismo embalaje. Tal como es SAP, asumimos que debe haber una babi o algún método estándar que pueda consumir para evitar dicha concurrencia.

Muchas gracias de antemano

Esto lo puedes lograr con objetos de bloqueo… Te creas tus objetos de bloqueo por la SE11, y lo aplicas en tu programa de la manera que necesites aplicar el bloqueo, y con esto garantizas que solo un usuario a la vez puede realizar dicho proceso.

Definicion de objeto de bloqueo

Nombre de un objeto de bloqueoUn 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 ( Concepto de bloqueo SAP).La solicitud y/o la liberación de los bloqueos se realiza 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 Dictionary ABAP.Para fijar bloqueos debe seguir los siguientes pasos:1. Debe definir un objeto de bloqueo en el Dictionary ABAP cuyo nombre debería empezar con E.2. Debe 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.

2 Me gusta

No me defino como abaper, pero sé que cuando hacen desarrollos usan paquetes. Usaste un paquete “propio” para el zeta?

Si es así, quiero creer que vía basis podrías limitar el objeto para el grupo de usuarios que tú quieras.

tambien cuando creas un reporte puedes tildar la opcion de bloqueo, pero queria solo para modificar con el usuario que lo creo, mas nadie !!

Me suena que @smota Esta por donde tento la duda. Voy a verificar cada una de las opciones y si @SidV usamos un paquete independiente.

Vamos a verificar.

Les mantengo al tanto

1 me gusta

No @canuto me confundiste, la consulta esta un poco confusa sobre que es lo que persigue, pero segun entendi quiere evitar que varios usarios al mismo tiempo realicen dicha funcion. Lo de editar el reporte no me parece factible ya que los usuarios no tienen acceso al modo abap.

correcto. Lo que quiero es, tal como lo hace estandar SAP cuando entras a la VL02N o MM02 e intentas editar un registro “tomado” por otra persona. Ejemplo:

Si @canuto esta en la VL02N editando la Nota de Entrega 50000214 yo por la VL02N no puedo editar esa Nota. Puedo hacerlo con otra nota de entrega pero eso no, hasta que tu la “sueltes”

1 me gusta

ummmm, entonces entendi mal yo jejejejeje !!! a listo, entonces prueba como dice @smota, a ver…yo he trabajado con objetos de autorizacion pero siempre me los pasa el basis o la otra es tratar de debugear esas tx a ver si no es tan complicado y haces algo parecido al estandar…pero debugear un estandar, es lo mas fastidioso del mundo !!! Disculpen si los confundi

La participación es valida. Gracias.
Vamos a verificar.

Ahhh yo también entendí mal entonces.

Creo que ésto podría ayudar:

We can lock the table before updating the entries. Two types of locks are there.

  1. To lock the entire table. Here when the table is locked by one program, another program will not be able to modify it.
  2. To lock the particular record only. Here when the record is locked by one program, the other program can modify records other than the one locked.

For option 1
Use the FM ENQUEUE_E_TABLEE to lock the table and FM DEQUEUE_E_TABLEE to unlock table.

For option 2
Go to SE11. There enter the name of your lock object and create it. Next screen you have to mention which field you want to lock.
For more info. on LOCK OBJECTS go to
h_tp://help.sap.com/saphelp_nw2004s/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm

Fuente: h_tps://scn.sap.com/message/10335428#10335428

Básicamente tendrías que analizar si quieres limitar la concurrencia solo en el zeta, o en tablas zetas :stuck_out_tongue:

Otro artículo hiper recomendado:
h_tp://scn.sap.com/people/gaurav.bharadwaj/blog/2012/01/19/sap-locking-it-s-logical

2 Me gusta

a bueno en HR hay un objeto estandar que bloquea a los trabajadores para que varios usuario no trabajen con el mismo empleado a la vez…habria que saber si aplica algo parecido !!!

Con la funcion ENQUEUE_E_TABLEE y DEQUEUE_E_TABLEE se logra este comportamiento. Solo debe crear el objeto por la se11 y usarlo con estas dos funciones, hay otras funciones con comportamiento parecidos.

1 me gusta

Buenas tardes.

Correctamente, lo que estamos buscando fue lo que comentó @smota. Ya la bloquea perfectamente, pero ahora el tema es desbloquearla. Solo lo hace cuando se sale completamente del programa Z al menú de SAP. No cuando salgo del tratamiento. El codigo que estamos usando es el siguiente

La diferencia @smota es que no creamos un objeto. Usamos unos estándar.

Que puede estar mal?

El bloqueo se hace con enqeue y el desbloqueo con deqeue, se supone que funciona asi, yo he usado este sistema pero a sinceridad no recuerdo si debia hacer algo mas, como un commit o algo por el estilo.
Puedes consultar la t-code de objetos bloqueados sm12 cuando lo bloquees ve a esta t-code, y luego cuando pases el desbloqueo, verifica si el objeto sale de aqui.

Me alegra que estes en buen camino.

1 me gusta

Listo. Trabajo realizado. Gracias a todos… @SidV y @smota ,era precisamente lo que estaba buscando.

Para el bloqueo se uso:

    CALL FUNCTION 'ENQUEUE_EVVBLKE'
    EXPORTING
    mode_likp = 'E' " Bloqueo de escritura, es el que tiene
    mandt = sy-mandt
    vbeln = W_NE
    _SCOPE = '1' " Te lo pone por defecto.
    EXCEPTIONS " Controlaría las posibles excepciones
    FOREIGN_LOCK = 1
    SYSTEM_FAILURE = 2
    OTHERS = 3.    `

para quitarlo:

CALL FUNCTION 'DEQUEUE_ALL' "Release Locks of an LUW
COMMIT WORK    `.    

Problema resuelto.! Si ven algo que pueda mejorar, bienvenido…

4 Me gusta

Saludos @zoombiejose,

Interesante consulta y me alegra que pudiste haber resuelto. Lo único es que noto que marcaste como respuesta tu propia publicación.

Lo recomendable sería que tomes la publicación o de @smota o @SidV (La más acertada) y le des el punto de respuesta a uno de ellos :muscle:

Yo marqué su tema como solución, pq él comparte cómo lo solucionó.

un post fue trasladado a un nuevo tema: Cómo limitar concurrencia en desarrollos ABAP

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.