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.save( )

entity.save( ) 


 

entity.save ( {modo} ) -> Resultado 
Parámetro Tipo   Descripción
modo  Entero largo in dk auto merge: habilita el modo de fusión automática
Resultado  Objeto in Resultado de guardar la operación

El método entity.save( ) guarda los cambios realizados en la entidad en la tabla relacionada con su dataClass. Debe llamar a este método después de crear o modificar una entidad si desea guardar los cambios realizados en ella.

La operación de guardar se ejecuta solo si se ha "tocado" al menos un atributo de entidad (ver los métodos entity.touched( ) y entity.touchedAttributes( )). De lo contrario, el método no hace nada (no se llama al activador).

En una aplicación multiusuario o multiproceso, el método entity.save( ) se ejecuta bajo un mecanismo de "bloqueo optimista", mientras que un sello de bloqueo interno se incrementa automáticamente cada vez que se guarda el registro. Para más información, consulte la página Bloquear entidades.

Por defecto, si se omite el parámetro modo, el método devolverá un error (ver abajo) siempre que la misma entidad haya sido modificada por otro proceso o usuario mientras tanto, sean cuales sean los atributos modificados.
De lo contrario, puede pasar la opción dk auto merge en el parámetro modo: cuando el modo de fusión automática está habilitado, una modificación realizada por otro proceso/usuario en la misma entidad pero en un atributo diferente no dará lugar a un error. Los datos resultantes guardados en la entidad serán la combinación (la "fusión") de todas las modificaciones no concurrentes (si se aplicaron modificaciones al mismo atributo, la operación de guardado falla y se devuelve un error, incluso con el modo de fusión automática).

Nota: el modo de fusión automática no está disponible para los atributos de tipo imagen, objeto y texto cuando se almacenan fuera del registro. Los cambios concurrentes en estos atributos darán lugar a un error dk status stamp has changed

Resultado

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

PropiedadTipoDescripción
successbooleanotrue si la acción de guardar es exitosa, de lo contrario es false.
Disponible solo si se utiliza la opción dk auto merge:
autoMergedbooleanotrue si se realizó una fusión automática, en caso 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_aliastextoAlias de usuario definido con SET USER ALIAS, o bien nombre de usuario en el directorio de la base 4D
user4d_idnúmeroNúmero del usuario 4D (solo disponible en bases binarias 4D)
host_nametextoNombre del equipo
task_nametextoNombre del proceso
client_versiontexto
Disponible solo en caso de error grave (error grave al tratar de duplicar una llave primaria, disco lleno ...):
errorscolección de objetos
messagetextoMensaje de error
componentSignaturetextofirma 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 el objeto Resultado en caso de error:

Constante Valor Comentario
dk status automerge failed 6 (Solo si se usa la opción  dk auto merge) La opción de combinación automática falló al guardar la entidad.
statusText asociado: "Auto merge failed"
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")

Crear una nueva entity:

 C_OBJECT($status;$employee)
 $employee:=ds.Employee.new()
 $employee.firstName:="Mary"
 $employee.lastName:="Smith"
 $status:=$employee.save()
 If($status.success)
    ALERT("Employee created")
 End if

Actualizar una entidad sin la opción dk auto merge:

 C_OBJECT($status;$employees;$employee)
 $employees:=ds.Employee.query("lastName=:1";"Smith")
 $employee:=$employees.first()
 $employee.lastName:="Mac Arthur"
 $status:=$employee.save()
 Case of
    :($status.success)
       ALERT("Employee updated")
    :($status.status=dk status stamp has changed)
       ALERT($status.statusText)
 End case

Actualizar una entidad con la opción dk auto merge:

 C_OBJECT($status;$employees;$employee)
 
 $employees:=ds.Employee.query("lastName=:1";"Smith")
 $employee:=$employees.first()
 $employee.lastName:="Mac Arthur"
 $status:=$employee.save(dk auto merge)
 Case of
    :($status.success)
       ALERT("Employee updated")
    :($status.status=dk status automerge failed)
       ALERT($status.statusText)
 End case



Ver también 

entity.drop( )
entity.getStamp( )
entity.isNew( )

 
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)