Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
entity.lock()
|
entity.lock() ( {mode} ) -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
mode | Lange Ganzzahl |
![]() |
dk reload if stamp changed: Erneutes Laden vor Sperren, wenn sich Stempel geändert hat. | |||||
Funktionsergebnis | Objekt |
![]() |
Ergebnis des Sperrvorgangs | |||||
Die Methode entity.lock() setzt ein pessimistisches Sperrverfahren für den durch Entity dargestellten Datensatz. Das Sperren erfolgt für einen Datensatz und alle Referenzen der Entity im aktuellen Prozess.
Weitere Informationen dazu finden Sie auf der Seite Entity sperren.
Andere Prozesse sehen diesen Datensatz als gesperrt (beim Versuch, dieselbe Entity mit dieser Methode zu sperren, enthält die Eigenschaft result.success falsch). Nur Methoden, die in der "sperrenden" Sitzung ausgeführt werden, können Attribute der Entity bearbeiten und sichern. Andere Sitzungen können die Entity im Nur-Lesen Modus laden, jedoch weder Werte eingeben noch sichern.
Ein gesperrter Datensatz wird entsperrt:
Standardmäßig, d.h. ohne den Parameter mode, gibt die Methode einen Fehler zurück (siehe unten), wenn dieselbe Entity inzwischen von einem anderen Prozess oder Benutzer geändert wurde (z.B. der Stempel hat sich geändert).
Übergeben Sie im Parameter mode die Option dk reload if stamp changed, wird kein Fehler zurückgegeben und die Entity wird erneut geladen, auch wenn sich der Stempel geändert hat (wenn die Entity noch existiert und der Primärschlüssel gleichgeblieben ist).
Ergebnis
Das von der Methode entity.lock() zurückgegebene Objekt enthält folgende Eigenschaften:
Eigenschaft | Typ | Beschreibung | |
success | Boolean | wahr bei erfolgreicher Sperraktion (oder wenn die Entity im aktuellen Prozess bereits gesperrt ist), sonst falsch. | |
Nur verfügbar bei Verwenden der Option dk reload if stamp changed: | |||
wasReloaded | Boolean | wahr bei erfolgreichem Laden der Entity, sonst falsch. | |
Nur verfügbar bei Auftreten eines Fehlers: | |||
status(*) | Zahl | Fehlercode, siehe unten | |
statusText(*) | Text | Fehlerbeschreibung, siehe unten | |
Nur verfügbar bei Auftreten eines Fehlers beim pessimistischen Sperrverfahren: | |||
lockKindText | text | "Gesperrt durch Datensatz" | |
lockInfo | Objekt | Angabe zum Ursprung der Sperre | |
task_id | Zahl | Prozess-id | |
user_name | Text | Benutzername der Sitzung auf dem Rechner | |
user4d_id | Zahl | Benutzerkennung im Verzeichnnis der 4D Datenbank | |
host_name | Text | Rechnername | |
task_name | Text | Prozessname | |
client_version | Text | ||
Nur verfügbar bei Auftreten eines ernsthaften Fehlers (Primärschlüssel existiert bereits, Festplatte voll, ...): | |||
errors | Collection von Objekten | ||
message | Text | Fehlermeldung | |
component signature | text | interne Signatur der Komponente (z.B. "dmbg" steht für die Komponente der Datenbank) | |
errCode | Zahl | Fehlercode |
(*) In den Eigenschaften status und statusText des Objekts Result können bei einem Fehler folgende Werte zurückgegeben werden:
Konstante | Wert | Kommentar |
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).
|
Beispiel mit Fehler:
C_OBJECT($employee;$status)
$employee:=ds.Employee.get(716)
$status:=$employee.lock()
Case of
:($status.success)
ALERT("Sie haben "+$employee.firstName+" "+$employee.lastName gesperrt)
:($status.status=dk status stamp has changed)
ALERT($status.statusText)
End case
Beispiel mit der Option dk reload if stamp changed:
C_OBJECT($employee;$status)
$employee:=ds.Employee.get(717)
$status:=$employee.lock(dk reload if stamp changed)
Case of
:($status.success)
ALERT("Sie haben "+$employee.firstName+" "+$employee.lastName gesperrt)
:($status.status=dk status entity does not exist anymore)
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)