Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com

Inicio

 
4D v19.8
entity.lock( )

entity.lock( ) 


 

entity.lock ( {modo} ) -> Resultado 
Parámetro Tipo   Descripción
modo  Entero largo in dk reload if stamp changed: recarga antes de bloquear si stamp cambió
Resultado  Objeto in Resultado de la operación de bloqueo

El método entity.lock( )pone un bloqueo pesimista(*) en el registro al que hace referencia la entidad. El bloqueo se establece para un registro y para todas las referencias de la entidad en el proceso actual.

(*)Para más información, consulte la página Bloquear entidades.

Otros procesos verán este registro como bloqueado (la propiedad result.success contendrá false si tratan de bloquear la misma entidad usando este método. Solo los métodos ejecutados en la sesión de "bloqueo" pueden editar y guardar los atributos de la entidad. La entidad puede ser cargada por otras sesiones, pero no podrán ingresar ni guardar valores

El registro bloqueado está desbloqueado:

  • cuando se llama al método unlock() en una entidad coincidente en el mismo proceso
  • automáticamente, cuando ya no se hace referencia a ninguna entidad en la memoria. Por ejemplo, si el bloqueo es solo una referencia local de una entidad, la entidad se desbloquea cuando el método finaliza. Siempre que haya referencias a la entidad en la memoria, el registro queda bloqueado.
  • automáticamente, cuando la entidad coincidente se bloqueó dentro de una transacción y la transacción se valida o cancela.

De forma predeterminada, si se omite el parámetro modo, el método devolverá un error (ver a continuación) si la misma entidad fue modificada (es decir, el sello ha cambiado) por otro proceso o usuario mientras tanto.
De lo contrario, puede pasar la opción dk reload if stamp changed en el parámetro modo: en este caso, no se devuelve ningún error y la entidad se recarga cuando el stamp ha cambiado (si la entidad todavía existe y la llave primaria sigue siendo la misma).

Resultado

El objeto devuelto por entity.lock( ) contiene las siguientes propiedades:

PropiedadTipoDescripción
successbooleanotrue si la acción de bloquear es exitosa (o si la entidad ya está bloqueada en el proceso actual), de lo contrario false.
Disponible solo si se utiliza la opción dk reload if stamp changed:
wasReloadedbooleanotrue si la entidad fue recargada con éxito, de lo contrario false.
Disponible solo en caso de error:
status(*)númeroCódigo de error, ver a continuación
statusText(*)textoDescripción del error, ver a continuación
Disponible solo en caso de error de bloqueo pesimista:
lockKindTexttexto"Bloqueado por registro"
lockInfoobjetoInformación sobre el origen del bloqueo
task_idnúmeroID del proceso
user_nametextoNombre de usuario de sesión en la máquina
user4d_idtextoNombre de usuario en el directorio de la base de datos 4D
host_nametextoNombre del equipo
task_nametextoNombre del proceso
client_versiontexto
Disponible solo en caso de error grave (llave primaria ya existe, disco lleno...):
errorscolección de objetos
messagetextoMensaje de error
component signaturetextoFirma del componente interno (por ejemplo, "dmbg" representa el componente de la base)
errCodenúmeroCódigo de error

(*) Los siguientes valores pueden devolverse en las propiedades status y statusText del objeto Resultado en caso de error:

Constante Valor Comentario
dk status entity does not exist anymore 5 La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido suprimida (el stamp ha cambiado y el espacio de memoria ahora está liberado)
  • la entidad ha sido suprimida y reemplazada por otra con una llave primaria diferente (el stamp ha cambiado y una nueva entidad ahora ocupa el espacio de memoria). Cuando se usa entity.drop( ), este error puede devolverse cuando se usa la opción dk force drop if stamp changed. Al usar entity.lock( ), este error puede devolverse cuando se usa la opción dk reload if stamp changed 

statusText asociado: "La entidad ya no existe"

dk status locked 3 La entidad está bloqueada por un bloqueo pesimista.
statusText asociado: "Ya bloqueado" ("Already locked")
dk status serious error 4 Un error grave es un error de bajo nivel de la base de datos (por ejemplo, llave duplicada), un error de hardware, etc.
statusText asociado: "Otro error" ("Other error")
dk status stamp has changed 2

El valor de stamp interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).

  • con entity.save( ):  error solo si no se utiliza la opción dk auto merge
  • con entity.drop( ): error solo si no se usa la opción dk force drop if stamp changed
  • con entity.lock( ): error solo si no se usa la opción dk reload if stamp changed
statusText asociado: "El stamp ha cambiado" ("Stamp has changed")

 

Ejemplo con error:

 C_OBJECT($employee;$status)
 $employee:=ds.Employee.get(716)
 $status:=$employee.lock()
 Case of
    :($status.success)
       ALERT("You have locked "+$employee.firstName+" "+$employee.lastName)
    :($status.status=dk status stamp has changed)
       ALERT($status.statusText)
 End case

Ejemplo con la opción dk reload if stamp changed:

 C_OBJECT($employee;$status)
 
 $employee:=ds.Employee.get(717)
 $status:=$employee.lock(dk reload if stamp changed)
 Case of
    :($status.success)
       ALERT("You have locked "+$employee.firstName+" "+$employee.lastName)
    :($status.status=dk status entity does not exist anymore)
       ALERT($status.statusText)
 End case



Ver también 

entity.unlock( )

 
PROPIEDADES 

Producto: 4D
Tema: ORDA - Entity

 
CONTENIDO DE LA PÁGINA 
 
HISTORIA 

Creado por: 4D v17

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v19)
Manual de lenguaje 4D ( 4D v19.1)
Manual de lenguaje 4D ( 4D v19.4)
Manual de lenguaje 4D ( 4D v19.5)
Manual de lenguaje 4D ( 4D v19.6)
Manual de lenguaje 4D ( 4D v19.7)
Manual de lenguaje 4D ( 4D v19.8)