Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
entity.save( )
|
entity.save ( {mode} ) -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
mode | Lange Ganzzahl |
![]() |
dk auto merge: Aktiviert automatisches Mischen | |||||
Funktionsergebnis | Objekt |
![]() |
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:
Eigenschaft | Typ | Beschreibung | |
success | Boolean | wahr bei erfolgreichem Sichern, sonst falsch | |
Nur bei Verwenden von dk auto merge verfügbar: | |||
autoMerged | Boolean | wahr bei Ausführen von "auto merge", sonst falsch | |
Nur bei Fehler verfügbar: | |||
status(*) | Zahl | Fehlercode, siehe unten | |
statusText(*) | Text | Fehlerbeschreibung, siehe unten | |
Nur bei Fehler beim pessimistischen Sperrverfahren verfügbar: | |||
lockKindText | Text | "Gesperrt durch Datensatz" | |
lockInfo | Objekt | Information über Ursprung des Sperrens | |
task_id | Zahl | Prozess Id | |
user_name | Text | Benutzername der Sitzung auf dem Rechner | |
user4d_id | Zahl | Benutzernummer | |
host_name | Text | Rechnername | |
task_name | Text | Prozessname | |
client_version | Text | ||
Nur bei ernstem Fehler verfügbar (z.B. Primärschlüssel existiert bereits, Festplatte voll...): | |||
errors | Collection von Objekten | ||
message | Text | Fehlermeldung | |
componentSignature | Text | interne Signatur der Komponente (z.B. "dmbg" steht für die Datenbankkomponente) | |
errCode | Zahl | Fehlercode |
(*) 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:
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).
|
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
Produkt: 4D
Thema: ORDA - Entity
Erstellt: 4D v17
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)