Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
entity.save( )
|
entity.save ( {modo} ) -> Resultado | ||||||||
Parámetro | Tipo | Descripción | ||||||
modo | Entero largo |
![]() |
dk auto merge: habilita el modo de fusión automática | |||||
Resultado | Objeto |
![]() |
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:
Propiedad | Tipo | Descripción | |
success | booleano | true si la acción de guardar es exitosa, de lo contrario es false. | |
Disponible solo si se utiliza la opción dk auto merge: | |||
autoMerged | booleano | true si se realizó una fusión automática, en caso contrario, false. | |
Disponible solo en caso de error: | |||
status(*) | número | Código de error, ver a continuación | |
statusText(*) | texto | Descripción del error, ver a continuación | |
Disponible solo en caso de error de bloqueo pesimista: | |||
lockKindText | texto | "Bloqueado por registro" | |
lockInfo | objeto | Información sobre el origen del bloqueo | |
task_id | número | ID del proceso | |
user_name | texto | Nombre de usuario de sesión en la máquina | |
user4d_alias | texto | Alias de usuario definido con SET USER ALIAS, o bien nombre de usuario en el directorio de la base 4D | |
user4d_id | número | Número del usuario 4D (solo disponible en bases binarias 4D) | |
host_name | texto | Nombre del equipo | |
task_name | texto | Nombre del proceso | |
client_version | texto | ||
Disponible solo en caso de error grave (error grave al tratar de duplicar una llave primaria, disco lleno ...): | |||
errors | colección de objetos | ||
message | texto | Mensaje de error | |
componentSignature | texto | firma del componente interno (por ejemplo, "dmbg" representa el componente de la base) | |
errCode | número | Có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:
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).
|
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
Producto: 4D
Tema: ORDA - Entity
Creado por: 4D v17
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)