Saltar para o conteúdo principal
Versão: 20 R6

$lock

Bloquea y desbloquea una entidad utilizando el mecanismo pesimista.

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

A propriedade lockKindText é "Locked by session".

Descrição

Los bloqueos activados por la API REST se colocan al nivel de la sesión.

Una entidad bloqueada se ve como bloqueada (es decir, las acciones de bloqueo / desbloqueo / actualización / eliminación no son posibles) por:

  • 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:

  • por su bloqueador, es decir un /?$lock=false en la sesión REST que define /?$lock=true
  • o si el timeout de inactividad de la sesión se alcanza (la sesión se cierra).

Resposta

Una petición ?$lock devuelve un objeto JSON con "result"=true si la operación de bloqueo se reutiliza y "result"=false si falla.

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).
Disponível apenas em caso de erro:
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")

Los siguientes valores pueden ser devueltos en las propiedade status y statusText del objeto __STATUS en caso de 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..."
}
}
}