SAP Netweaver Gateway OData. Bloqueo persistente en llamadas externas. Persistent blocking on external calls. 🔐🔃🔓
Cuando lanzamos peticiones a backend desde Fiori(app personalizada) a través de odata la llamda entra en la RFC asociada y genera el bloqueo «ENQUEUE» del objeto correctamente, pero en cuanto sale de la rfc ese bloqueo se libera.
When we launch requests to backend from Fiori(custom app) through odata the call enters the associated RFC and generates the «ENQUEUE» lock of the object correctly, but as soon as it exits the rfc that lock is released.
La situación es:
Usuario entra en un objeto en la capa Fiori y pulsa en el botón «Edit», la app lanza una llamada para bloqueo de objeto, pero en cuanto vuelve el objeto queda liberado pues sap entiende que al salir de la rfc se está saliendo del sistema, es como si en R/3 entras a editar un pedido de venta (se bloquea) pero decides salirte del sistema sin salir previamente de la transacción (/nex) sap al detectar tu salida del sistema desbloqueará todo lo bloqueado por tu user.
The situation is:
User enters an object in the Fiori layer and clicks on the «Edit» button, the app launches an object lock call, but as soon as the object is released as sap understands that when you exit the rfc you are leaving the system, it is as if in R/3 you enter to edit a sales order (it crashes) but you decide to leave the system without leaving the sap transaction (/nex) when detecting your system output will unlock everything blocked by your user.
La problemática es que un usuario en Fiori al dar en Edit no bloquea realmente el objeto, y podría ser editado por otro usuario o desde R/3 directametne. Esto genera un problema de concurrencia.
The problem is that a user in Fiori when giving in Edit does not actually lock the object, and could be edited by another user or from R/3 directmetne. This creates a concurrency problem.
El código que pongo a continuación permite realizar el bloqueo de forma persistente, y no se liberará hasta que se realice el desbloqueo (Ususario guarde datos o los descarte).
The code below allows you to persistently lock, and it will not be released until unlocking is performed (Ususer saves data or discards it)
Es muy importante tener un flujo de desbloqueo bien acotado, de lo contrario se podrían generar inconsistencias en el sistema.
It is very important to have a well- bound unlock flow, otherwise inconsistencies could be generated in the system.
Con esto generamos un bloqueo en la sm12 y si un user edita un objeto no tendremos acceso a él ni desde fiori ni desde R/3.
With this we generate a lock on the sm12 and if a user edits an object we will not have access to it eer from fiori or from R/3.
Espero que os sea de ayuda.
Saludos.
Para más artículos de interés sobre SAP visita:
https://setevalapinsap.com