Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v19.8
entity.save( )

entity.save( ) 


 

entity.save ( {mode} ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
mode  Lange Ganzzahl in dk auto merge: Aktiviert automatisches Mischen
Funktionsergebnis  Objekt in Ergebnis des Sichernvorgangs

Die Methode entity.save( ) sichert die Änderungen in der Entity in der Tabelle, die mit ihrer Dataclass verbunden ist. Sie müssen diese Methode nach Erstellen oder Ändern einer Entity aufrufen, wenn sie gesichert werden soll.

Das Sichern wird nur ausgeführt, wenn mindestens ein Attribut der Entity "angetastet" wurde (siehe Methoden entity.touched( ) und entity.touchedAttributes( )). Sonst führt die Methode nichts aus (der Trigger wird nicht aufgerufen).

In einer Applikation mit mehreren Benutzern oder mehreren Prozessen wird die Methode entity.save( ) mit dem optimistischen Sperrverfahren ausgeführt. Dabei wird der interne Sperrstempel bei jedem Sichern des Datensatzes automatisch erhöht. Weitere Informationen dazu finden Sie auf der Seite Entity sperren.

Standardmäßig, also ohne den Parameter mode, gibt die Methode einen Fehler zurück (siehe unten), wenn die gleiche Entity zwischenzeitlich durch einen anderen Prozess oder Benutzer geändert wurde, egal welches Attribut geändert wurde.
Mit dem Parameter mode können Sie die Option dk auto merge übergeben: Ist automatisches Mischen aktiviert, und macht ein anderer Prozess bzw. Benutzer zwischenzeitlich eine Änderung in derselben Entity, aber in einem anderen Attribut, gibt es keinen Fehler. Die in der Entity gesicherten Daten sind eine Kombination ("merge") aller nicht-konkurrierenden Änderungen. Nur bei Änderungen im gleichen Attribut schlägt das Sichern fehl und ein Fehler wird zurückgegeben, und das auch mit dem Modus "auto merge".

Hinweis: "auto merge" ist nicht verfügbar für Attribute vom Typ Bild, Objekt und Text, wenn sie außerhalb des Datensatzes gesichert werden. Gleichzeitige Änderungen in diesen Attributen führen zum Fehler dk status stamp has changed

Ergebnis

Das von entity.save( ) zurückgegebene Objekt enthält folgende Eigenschaften:

EigenschaftTypBeschreibung
successBooleanwahr bei erfolgreichem Sichern, sonst falsch
Nur bei Verwenden von dk auto merge verfügbar:
autoMergedBooleanwahr bei Ausführen von "auto merge", sonst falsch
Nur bei Fehler verfügbar:
status(*)ZahlFehlercode, siehe unten
statusText(*)TextFehlerbeschreibung, siehe unten
Nur bei Fehler beim pessimistischen Sperrverfahren verfügbar:
lockKindTextText"Gesperrt durch Datensatz"
lockInfoObjektInformation über Ursprung des Sperrens
task_idZahlProzess Id
user_nameTextBenutzername der Sitzung auf dem Rechner
user4d_idZahlBenutzernummer
host_nameTextRechnername
task_nameTextProzessname
client_versionText
Nur bei ernstem Fehler verfügbar (z.B. Primärschlüssel existiert bereits, Festplatte voll...):
errorsCollection von Objekten
messageTextFehlermeldung
componentSignatureTextinterne Signatur der Komponente (z.B. "dmbg" steht für die Datenbankkomponente)
errCodeZahlFehlercode

(*) Bei einem Fehler in den Eigenschaften status und statusText des Objekts Result können folgende Werte zurückgegeben werden:

Konstante Wert Kommentar
dk status automerge failed 6 (Nur bei  Verwenden der Option dk auto merge) Der Modus automatisches Mischen beim Sichern der Entity ist fehlgeschlagen.
Zugewiesener Statustext: "Auto merge failed"
dk status entity does not exist anymore 5 Die Entity existiert nicht mehr in den Daten. Dieser Fehler kann in folgenden Fällen auftreten:
  • Die Entity wurde gelöscht (der Stempel hat sich geändert und der Speicherplatz ist jetzt frei)
  • Die Entity wurde gelöscht und durch eine andere mit einem anderen Primärschlüssel ersetzt (der Stempel hat sich geändert und eine neue Entity verwendet jetzt den Speicherplatz). Mit entity.drop() wird dieser Fehler beim Verwenden der Option dk force drop if stamp changed zurückgegeben. Mit entity.lock() wird dieser Fehler beim Verwenden der Option dk reload if stamp changed zurückgegeben.

Zugewiesener Statustext: "Entity does not exist anymore"

dk status locked 3 Die Entity wird durch pessimistisches Sperrverfahren gesperrt.
Zugewiesener Statustext: "Already locked"
dk status serious error 4 Ein ernsthafter Fehler ist ein low-level Fehler in der Anwendung, wie z.B. duplizierter Schlüssel, Hardware Fehler, etc.
Zugewiesener Statustext: "Other error"
dk status stamp has changed 2

Der interne Stempelwert der Entity passt nicht zum Wert der in den Daten gespeicherten Entity (optimistisches Sperrverfahren).

  • mit entity.save( ): nur Fehler, wenn die Option dk auto merge nicht verwendet wird
  • mit entity.drop(): nur Fehler, wenn die Option dk force drop if stamp changed nicht verwendet wird
  • mit entity.lock(): nur Fehler, wenn die Option dk reload if stamp changed nicht verwendet wird
Zugewiesener Statustext: "Stamp has changed"

Eine neue Entity erstellen:

 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

Eine Entity ohne die Option dk auto merge aktualisieren:

 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

Eine Entity mit der Option dk auto merge aktualisieren:

 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



Siehe auch 

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

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: ORDA - Entity

 
SEITENINHALT 
 
GESCHICHTE 

Erstellt: 4D v17

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v19)
4D Programmiersprache ( 4D v19.1)
4D Programmiersprache ( 4D v19.4)
4D Programmiersprache ( 4D v19.5)
4D Programmiersprache ( 4D v19.6)
4D Programmiersprache ( 4D v19.7)
4D Programmiersprache ( 4D v19.8)