Lade...
 

CX_OVERWRITING_REF - Overwriting Wrapper

CX_OVERWRITING_REF

Klassenhierarchie
Beschreibung: (Business Pattern)

Diese Klasse ist ein Overwriting Wrapper. In der Regel wird die Klasse nicht direkt angesprochen, sondern es wird der InstantView®-Befehl WrapObject eingesetzt. Die überschriebenen Zugriffsausdrücke werden mittels einer Instanz der Klasse CX_ATOM_TBL verwaltet  (uniqueID = "Anonymous Slot").

Achtung: Die Atom-Table wird aktuell beim erstmaligen Überschreiben eines Slots (bei der ersten Verwendung dieses Überschreibungspfads) in einem persistenten CX_OVERWRITING_REF in der Datenbank aktualisiert. Die Atom-Table wird jedoch nur beim Öffnen der Datenbank und beim Erweitern der Atom-Table neu geladen, sodass es sein kann, dass ein zweiter Client, der früher gestartet wurde, die neu angelegten Slots noch nicht kennt und damit nicht korrekt lesen kann. Das Problem lässt sich aktuell durch einen Neustart des Clients oder durch erneutes Öffnen der Datenbank gelöst werden.

Achtung: Für die Indizierung von CX_OVERWRITING_REFs gelten zusätzliche Einschränkungen.

Code-Beispiel:
Var(target, wrapper)

// assuming target is filled with a persistent object

"target" target Put(uniqueID)

target WrapObject(OVERWRITING) -> wrapper

 

/* this is equivalent:

CreatePersObject(CX_OVERWRITING_REF) -> wrapper

target wrapper Call(SetContents)

*/

 

wrapper Copy(uniqueID) Attention // => "target"

"wrapper" wrapper Put(uniqueID)

// now wrapper Copy(uniqueID) <> target Copy(uniqueID)

wrapper Copy(uniqueID) Attention // => "wrapper"

target Copy(uniqueID) Attention // => "target" 

Um einen transienten Wrapper auf ein persistentes Objekt zu erzeugen muss CreateTransObject verwendet werden. Der Befehl WrapObject erzeugt immer ein Objekt in derselben Datenbank wie das Target-Objekt.

Var(target, wrapper)

// assuming target is filled with a persistent object

target CreateTransObject(CX_OVERWRITING_REF) -> wrapper

target wrapper Call(SetContents)

Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
Overwritten     VECTOR〈OBJECT〉 Namen der überschriebenen Slots und Datenfelder
Contents     OBJECT Fragt das gewrappte Objekt ab
Deleted     INTEGER Prüft, ob der Wrapper in der Datenbank logisch gelöscht wurde
GetSiblings     COLLECTION Alle Siblings dieses Objektes
GetSiblings2     COLLECTION Alle Siblings dieses Objektes
GetSlotEntries     VECTORject> Rückgabe von internen Informationen zu Slots
LastUpdate     OBJECT Liefert das Datum des letzten Schreibzugriffs auf den Wrapper
Link   OBJECT   Dieses Objekt in die Liste der Objekte mit Gültigkeit einfügen
NextValidObject     OBJECT Liefert das zu dem Wrapper nachfolgende, gültige Austauschobjekt.
PreviousValidObject     OBJECT Liefert das zu dem Wrapper vorherige, gültige Austauschobjekt.
ReferenceCount     INTEGER Anzahl Referenzierungen
RestrictedValidity *     Gültigkeitsbereich eingeschränkt?
SanityCheck     INTEGER Prüfung auf Konsistenz des Wrappers
SetContents   OBJECT   Setzt das gewrappte Objekt
Siblings *     Objekte mit Gültigkeit
SpanDateValidity * STRING   Gültigkeitszeitraum lesen/schreiben
string   INTEGER CX_STRING Liefert die String-Darstellung des Objektes
Unlink       Dieses Objekt aus der Liste der Objekte mit Gültigkeit entfernen
Unlink2       Dieses Objekt aus der Liste der Objekte mit Gültigkeit entfernen
Valid   CX_DATE INTEGER Prüft, ob Wrapper und Objekt zu dem Zeitpunkt gültig sind
VerifySiblings     INTEGER Ring der Austauschobjekte prüfen
ValidSince     CX_TERM Liefert den Beginn der Gültigkeitszeitspanne für Objekt und Wrapper.
ValidToday     INTEGER Prüft, ob Wrapper und Objekt zum aktuellen Gültigkeitsdatum gültig sind. (siehe: Valid)
ValidUntil     CX_TERM Liefert das Ende der Gültigkeitszeitspanne für Objekt und Wrapper.

* MA = Member-Access-Funktion,
grau unterlegt = geerbte Funktion

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
_uniqueID STRING   * Eindeutiger Schlüssel
_validity POINTER CX_VALIDITY   Gültigkeitszeitraum des Objektes
_object POINTER CX_CLASS   Das gewrappte Objekt

* I = Indizierbares Datenfeld,
grau unterlegt = geerbtes Datenfeld

Verwendung in AppsWH
Modul Kurzbeschreibung