Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com

Accueil

 
4D v19.8
entity.save( )

entity.save( ) 


 

entity.save ( {mode} ) -> Résultat 
Paramètre Type   Description
mode  Entier long in dk auto merge: Active le mode "automatic merge"
Résultat  Objet in Résultat de la sauvegarde

La méthode entity.save( ) sauvegarde dans la table de la dataclass les modifications effectuées sur l'entité. Vous devez appeler cette méthode après toute création ou modification d'entité si vous souhaitez stocker les changements.  

La sauvegarde est effectuée si et seulement si au moins un attribut de l'entité a été "touché" (voir les méthodes entity.touched( ) et entity.touchedAttributes( )). Sinon, la méthode ne fait rien (le trigger n'est pas appelé).

Dans une application multi-utilisateur ou multi-process, la méthode entity.save( ) est exécutée avec le mécanisme du "verrouillage optimiste", dans lequel un compteur interne (stamp) est automatiquement incrémenté à chaque sauvegarde de l'enregistrement. Pour plus d'informations, veuillez vous reporter à la page Verrouillage d'entités.

Par défaut, si le paramètre mode est omis, la méthode retournera systématiquement une erreur (voir ci-dessous) lorsque la même entité a été modifiée entre-temps par un autre process ou utilisateur, quel(s) que soi(en)t l(es) attribut(s) modifié(s).
Vous pouvez passer l'option dk auto merge dans le paramètre mode afin d'activer le mode "automatic merge". Dans ce mode, une modification effectuée entre-temps par un autre process/utilisateur sur la même entité mais sur un attribut différent ne génère pas d'erreur. Les données effectivement stockées dans l'enregistrement résultent alors de la combinaison (le "merge") des modifications non-concurrentes (si des modifications ont été effectuées sur le même attribut, la sauvegarde échoue et une erreur est retournée, même en mode "automatic merge").

Note : Le mode "automatic merge" n'est pas utilisable avec les attributs de type image, objet ou texte stockés en-dehors de l'enregistrement.

Résultat

L'objet retourné par entity.save( ) contient les propriétés suivantes :

PropriétéTypeDescription
successbooléenvrai si la sauvegarde a été effectuée avec succès, sinon faux.
Disponible uniquement si l'option dk auto merge a été utilisée :
autoMergedbooléenvrai si un "auto merge" a été effectué, sinon faux.
Disponible uniquement en cas d'erreur (status=faux) :
status(*)numériqueCode d'errreur, voir ci-dessous
statusText(*)texteDescription de l'errreur, voir ci-dessous
Disponible uniquement en cas d'erreur en verrouillage pessimiste :
lockKindTexttexte"Locked by record"/"'Verrouillé par enregistrement"
lockInfoobjetInformation sur l'origine du verrouillage
task_idnumériqueID du process
user_nametexteNom de l'utilisateur de la session sur la machine
user4d_aliastexteAlias utilisateur défini avec FIXER ALIAS UTILISATEUR, sinon le nom d'utilisateur dans le répertoire de la base 4D
user4d_idnumériqueNuméro de l'utilisateur 4D (Disponible uniquement dans les bases 4D binaires) 
host_nametexteNom de la machine
task_nametexteNom du process
client_versiontexte
Disponible uniquement en cas d'erreur sérieuse (clé primaire dupliquée, disque plein...) :
errorscollection d'objets
messagetexteMessage d'erreur
componentSignaturetexteSignature de composant interne (ex. "dmbg" pour le composant base de données)
errCodenumériqueCode d'erreur

(*) Les valeurs suivantes peuvent être retournées dans les propriétés status et statusText de l'objet Résultat en cas d'erreur :

Constante Valeur Comment
dk status automerge failed 6 (Uniquement si l'option dk auto merge est utilisée) Echec du mécanisme de merge automatique lors de la sauvegarde de l'entité.
statusText associé : "Auto merge failed"
dk status entity does not exist anymore 5 L'entité n'existe plus dans les données. Cette erreur peut se produire dans les cas suivants :
  • l'entité a été supprimée (le stamp est modifié et l'espace mémoire est libéré)
  • l'entité a été supprimée et remplacée par une autre avec une clé primaire différente (le stamp est modifié et une nouvelle entité occupe l'espace mémoire). Avec entity.drop( ), cette erreur peut être retournée lorsque l'option dk force drop if stamp changed est utilisée. Avec entity.lock( ), cette erreur peut être retournée lorsque l'option dk reload if stamp changed est utilisée.

statusText associé : "Entity does not exist anymore"

dk status locked 3 L'entité est verrouillée par un verrou pessimiste.
statusText associé : "Already locked"
dk status serious error 4 Une erreur critique peut être une erreur de bas niveau de la base de données (ex. clé dupliquée), une erreur matérielle, etc.
statusText associé : "Other error"
dk status stamp has changed 2

La valeur du marqueur interne (stamp) de l'entité ne correspond pas à celle de l'entité stockée dans les données (verrouillage optimiste).

  • avec entity.save( ) : erreur uniquement si l'option dk auto merge n'est pas utilisée
  • avec entity.drop( ) : erreur uniquement si l'option dk force drop if stamp changed n'est pas utilisée
  • avec entity.lock( ) : erreur uniquement si l'option dk reload if stamp changed n'est pas utilisée
statusText associé : "Stamp has changed"

Création d'une nouvelle entité :

 C_OBJET($status;$employee)
 $employee:=ds.Employee.new()
 $employee.firstName:="Mary"
 $employee.lastName:="Smith"
 $status:=$employee.save()
 Si($status.success)
    ALERTE("Employé(e) créé(e)")
 Fin de si

Mise à jour d'une entité sans option dk auto merge :

 C_OBJET($status;$employees;$employee)
 $employees:=ds.Employee.query("lastName=:1";"Smith")
 $employee:=$employees.first()
 $employee.lastName:="Mac Arthur"
 $status:=$employee.save()
 Au cas ou
    :($status.success)
       ALERTE("Employé(e) mis(e) à jour")
    :($status.status=dk status stamp has changed)
       ALERTE($status.statusText)
 Fin de cas

Mise à jour d'une entité avec option dk auto merge :

 C_OBJET($status;$employees;$employee)
 
 $employees:=ds.Employee.query("lastName=:1";"Smith")
 $employee:=$employees.first()
 $employee.lastName:="Mac Arthur"
 $status:=$employee.save(dk auto merge)
 Au cas ou
    :($status.success)
       ALERTE("Employé(e) mis(e) à jour")
    :($status.status=dk status automerge failed)
       ALERTE($status.statusText)
 Fin de cas



Voir aussi  

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

 
PROPRIÉTÉS 

Produit : 4D
Thème : ORDA - Entity
Nom intl. : entity.save( )

 
PAGE CONTENTS 
 
HISTORIQUE 

Créé : 4D v17

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v19)
4D - Langage ( 4D v19.1)
4D - Langage ( 4D v19.4)
4D - Langage ( 4D v19.5)
4D - Langage ( 4D v19.6)
4D - Langage ( 4D v19.7)
4D - Langage ( 4D v19.8)