Saltar al contenido principal
Versión: 20 R5 BETA

$lock

Locks and unlocks an entity using the pessimistic mechanism.

Sintaxis

Para bloquear una entidad para las otras sesiones y procesos 4D:

/?$lock=true

Para desbloquear la entidad para las otras sesiones y procesos 4D:

/?$lock=false

The lockKindText property is "Locked by session".

Descripción

The locks triggered by the REST API are put at the session level.

A locked entity is seen as locked (i.e. lock / unlock / update / delete actions are not possible) by:

  • otras sesiones REST
  • los procesos 4D (cliente/servidor, almacén de datos remoto, monopuesto) ejecutadas en el servidor REST.

Una entidad bloqueada por la API REST sólo puede ser desbloqueada:

  • by its locker, i.e. a /?$lock=false in the REST session that sets /?$lock=true
  • or if the session's inactivity timeout is reached (the session is closed).

Respuesta

A ?$lock request returns a JSON object with "result"=true if the lock operation was successful and "result"=false if it failed.

El objeto "__STATUS" devuelto tiene las siguientes propiedades:

PropiedadTipoDescripción
Disponible sólo en caso de éxito:
successbooleantrue si la acción de bloqueo tiene éxito (o si la entidad ya está bloqueada en la sesión actual), false en caso contrario (no devuelto en este caso).
Available only in case of error:
statusnumberCódigo de error, ver abajo
statusTexttextDescripción del error, ver abajo
lockKindnumberCódigo de bloqueo
lockKindTexttext"Locked by session" si está bloqueado por una sesión REST, "Locked by record" si está bloqueado por un proceso 4D
lockInfoobjectInformación sobre el origen del bloqueo. Las propiedades devueltas dependen del origen del bloqueo (proceso 4D o sesión REST).
Available only for a 4D process lock:
task_idnumberID del Proceso
user_nametextNombre de usuario de la sesión en la máquina
user4d_aliastextNombre o alias del usuario 4D
user4d_idnumberID del usuario en el directorio de la base de datos 4D
host_nametextNombre de la máquina
task_nametextNombre del proceso
client_versiontextVersión del cliente
Available only for a REST session lock:
hosttextURL que bloqueó la entidad (por ejemplo, "127.0.0.1:8043")
IPAddrtextDirección IP del bloqueo (por ejemplo: "127.0.0.1")
recordNumbernumberNúmero del registro bloqueado
userAgenttextuserAgent del origin del bloqueo (ej: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36")

The following values can be returned in the status and statusText properties of the __STATUS object in case of error:

statusstatusTextComentario
2"Stamp has changed"El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
3"Already locked"La entidad está bloqueada por un bloqueo pesimista.
4"Other error"Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
5"Entity does not exist anymore"La entidad ya no existe en los datos.

Ejemplo

Bloqueamos una entidad en un primer navegador:

GET /rest/Customers(1)/?$lock=true

Response:

{
"result": true,
"__STATUS": {
"success": true
}
}

En un segundo navegador (otra sesión), enviamos la misma petición.

Response:

{
"result":false,
"__STATUS":{
"status":3,
"statusText":"Already Locked",
"lockKind":7,
"lockKindText":"Locked By Session",
"lockInfo":{
"host":"127.0.0.1:8043",
"IPAddr":"127.0.0.1",
"recordNumber": 7,
"userAgent": ""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36..."
}
}
}