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

Home

 
4D v19.8
entity.lock()

entity.lock() 


 

entity.lock() ( {mode} ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
mode  Lange Ganzzahl in dk reload if stamp changed: Erneutes Laden vor Sperren, wenn sich Stempel geändert hat.
Funktionsergebnis  Objekt in 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:

  • wenn die Methode unlock() für eine passende Entity im gleichen Prozess aufgerufen wird
  • automatisch, sobald keine Entities im Speicher mehr darauf verweisen. Ist die Sperre z.B. nur auf eine lokale Referenz einer Entity gesetzt, wird die Entity bei Beenden der Methode automatisch entsperrt. Solange es Referenzen auf die Entity im Speicher gibt, bleibt der Datensatz gesperrt.
  • automatisch, wenn die passende Entity innerhalb einer Transaktion gesperrt ist und die Transaktion bestätigt oder annulliert wird.

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:

EigenschaftTypBeschreibung
successBooleanwahr 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:
wasReloadedBooleanwahr bei erfolgreichem Laden der Entity, sonst falsch.
Nur verfügbar bei Auftreten eines Fehlers:
status(*)ZahlFehlercode, siehe unten
statusText(*)TextFehlerbeschreibung, siehe unten
Nur verfügbar bei Auftreten eines Fehlers beim pessimistischen Sperrverfahren:
lockKindTexttext"Gesperrt durch Datensatz"
lockInfoObjektAngabe zum Ursprung der Sperre
task_idZahlProzess-id
user_nameTextBenutzername der Sitzung auf dem Rechner
user4d_idZahlBenutzerkennung im Verzeichnnis der 4D Datenbank
host_nameTextRechnername
task_nameTextProzessname
client_versionText
Nur verfügbar bei Auftreten eines ernsthaften Fehlers (Primärschlüssel existiert bereits, Festplatte voll, ...):
errorsCollection von Objekten
messageTextFehlermeldung
component signaturetextinterne Signatur der Komponente (z.B. "dmbg" steht für die Komponente der Datenbank)
errCodeZahlFehlercode

(*) 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:
  • 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"

 

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



Siehe auch 

entity.unlock()

 
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)