Aller au contenu principal
Version: 20 R5 BETA

$lock

Locks and unlocks an entity using the pessimistic mechanism.

Syntaxe

Pour verrouiller une entité pour les autres sessions et process 4D :

/?$lock=true

Pour déverrouiller l'entité pour les autres sessions et processus 4D :

/?$lock=false

The lockKindText property is "Locked by session".

Description

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:

  • d'autres sessions REST
  • les process 4D (client/serveur, datastore distant, monoposte) exécutés sur le serveur REST.

Une entité verrouillée par l'API REST peut être déverrouillée uniquement :

  • 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).

Réponse

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

L'objet "__STATUS" retourné possède les propriétés suivantes :

PropriétéTypeDescription
Disponible uniquement en cas de succès:
successbooleanvrai si l'action de verrouillage a été réussie (ou si l'entité est déjà verrouillée dans la session courante), sinon faux (non retourné dans ce cas).
Available only in case of error:
statusnumberCode d'erreur, voir ci-dessous
statusTexttextDescription de l'erreur, voir ci-dessous
lockKindnumberCode de verrouillage
lockKindTexttext"Locked by session" en cas de verrouillage par une session REST, "Locked by record" en cas de verrouillage par un process 4D
lockInfoobjectInformation sur l'origine du verrouillage. Les propriétés retournées dépendent de l'origine du verrouillage (process 4D ou session REST).
Available only for a 4D process lock:
task_idnumberID du process
user_nametextNom d'utilisateur de la session sur la machine
user4d_aliastextNom ou alias de l'utilisateur 4D
user4d_idnumberIdentifiant utilisateur dans le répertoire de la base 4D
host_nametextNom de la machine
task_nametextNom du process
client_versiontextVersion du client
Available only for a REST session lock:
hosttextURL d'origine du verrouillage de l'entité (ex : "127.0.0.1:8043")
IPAddrtextAdresse IP d'origine du verrouillage (ex. 127.0.0.1")
recordNumbernumberNuméro de l'enregistrement verrouillé
userAgenttextuserAgent de l'origine du verouillage (ex : "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:

statusstatusTextCommentaire
2"Stamp has changed"La valeur du marqueur interne (stamp) de l'entité ne correspond pas à celle de l'entité stockée dans les données (verrouillage optimiste).
3"Already locked"L'entité est verrouillée par un verrou pessimiste.
4"Other error"Une erreur critique peut être une erreur de bas niveau de la base de données (ex. clé dupliquée), une erreur matérielle, etc.
5"Entity does not exist anymore"L'entité n'existe plus dans les données.

Exemple

Nous verrouillons une entité dans un premier navigateur :

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

Response:

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

Dans un second navigateur (autre session), nous envoyons la même requête.

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..."
}
}
}