Saltar para o conteúdo principal
Versão: 20 R5 BETA

$lock

Locks and unlocks an entity using the pessimistic mechanism.

Sintaxe

Para bloquear uma entidade para outras sessões e processos 4D:

/?$lock=true

Para desbloquear a entidade para outras sessões e processos 4D:

/?$lock=false

The lockKindText property is "Locked by session".

Descrição

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:

  • outras sessões REST
  • Processos 4D (cliente/servidor, datastore remoto, autónomo) em execução no servidor REST.

Uma entidade bloqueada pela API REST só pode 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).

Resposta

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

O objeto "__STATUS" devolvido tem as seguintes propriedades:

PropriedadeTipoDescrição
Disponível apenas em caso de sucesso:
successbooleantrue se a ação de bloqueio for bem sucedida (ou se a entidade já estiver bloqueada na sessão atual), false caso contrário (não devolvido neste caso).
Available only in case of error:
statusnumberCódigo de erro, ver abaixo
statusTexttextDescrição do erro, ver abaixo
lockKindnumberCódigo de bloqueio
lockKindTexttext"Bloqueado por sessão" se bloqueado por uma sessão REST, "Bloqueado por registo" se bloqueado por um processo 4D
lockInfoobjectInformações sobre a origem do bloqueio. Retorna propriedades dependendo da origem da trava (processo 4D ou sessão REST)
Disponível só para um processo trava 4D:
task_idnumberProcess ID
user_nametextNome de usuário de sessão na máquina
user4d_aliastextNome ou apelido do usuário 4D
user4d_idnumberId do usuário no diretório do banco de dados 4D
host_nametextNome da máquina
task_nametextNome de processo
client_versiontextVersão do cliente
Disponível só para um processo trava REST:
hosttextURL que bloqueou a entidade (por exemplo, "127.0.0.1:8043")
IPAddrtextEndereço IP da trava (por exemplo. "127.0.0.1")
recordNumbernumberNúmero de registo do registo bloqueado
userAgenttextuserAgent of the locker (e.g. 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:

statusstatusTextComentário
2"Stamp has changed"O valor de selo interno da entidade não corresponde a uma da entidade armazenada nos dados (bloqueio otimista).
3"Already locked"A entidade está fechada por uma fechadura pessimista.
4"Other error"Um erro grave é um erro de banco de dados de baixo nível (por exemplo, chave duplicada), um erro de hardware, etc.
5"Entity does not exist anymore"A entidade não existe mais nos dados.

Exemplo

Bloqueamos uma entidade num primeiro navegador:

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

Response:

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

Num segundo navegador (outra sessão), enviamos o mesmo pedido.

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