Lade...
 

CX_DESCRIPTIVE_REF - Desriptive Wrapper

CX_DESCRIPTIVE_REF

Klassenhierarchie
Beschreibung:

Diese Klasse ist die Basisklasse für alle Wrapper. I.d.R. wird die Klasse nicht direkt angesprochen, sondern es wird der InstantView®-Befehl WrapObject eingesetzt.

Code-Beispiel:
Var(target, wrapper)

// assuming target is filled with a persistent object

"target" target Put(uniqueID)

target WrapObject(DESCRIPTIVE) -> wrapper

 

/* this is equivalent:

CreatePersObject(CX_DESCRIPTIVE_REF) -> wrapper

target wrapper Call(SetContents)

*/

 

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

"a wrapper" wrapper Put(comment)

wrapper Copy(comment) Attention // => "a wrapper"

target Copy(comment) // Error, comment is not available in 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_DESCRIPTIVE_REF) -> wrapper

target wrapper Call(SetContents)

 

Wrapper-Gültigkeiten

Die Wrapper-Klassen CX_DESCRIPTIVE_REF und CX_OVERWRITING_REF sind von CX_TERMED abgeleitet und implementieren das Gültigkeitskonzept. Da da für die Gültigkeiten von Wrapper-Klassen besondere Regeln gelten, ist dies hier erklärt und veranschaulicht.

Das folgende Bild zeigt eine etwas komplexere Situation, die durch die Verwendung von Wrappern und Gültigkeiten entstehen kann. Die gepunkteten farbigen Linien zeigen die per Link aufgebauten Ringe von Austauschobjekten, die durchgezogenen schwarzen Linien zeigen bei Wrappen deren Zielobjekt an.

Beispiel: Objekte & Wrapper mit Austauschobjekten

Das Bild zeigt drei Austauschringe, die durch Wrapper verbunden sind. Den einfachsten Fall stellt der orangene Ring mit den Objekten 1-3 dar. Objekt1 hat zwei Austauschobjekte, die je nach gesetztem Gültigkeitsdatum rausgegeben werden. Der lila Ring beginnend bei WrapperA zeigt, dass ein Wrapper nicht automatisch Teil des Austauschrings des Zielobjekts (hier Objekt1) ist. Wird Link auf einem Wrapper aufgerufen, dann wird das neue Austauschobjekt als Austauschobjekt des Wrappers in dessen Ring von Austauschobjekten eingefügt, der Austauschring des Zielobjekts wird dadurch nicht beeinflusst. Wie in dem Bild mit WrapperA und WrapperB veranschaulicht, kann man mit den Wrappern der Objekte einen parallelen Austauschring mit gleichen oder ganz anderen Gültigkeiten aufbauen. ObjektC und WrapperD zeigen, dass nicht alle Wrapper eines Rings in den gleichen Ring mit Zielobjekten zeigen müssen und ein Ring auch nicht nur aus Wrappern bestehen muss. Der grüne Ring mit ObjektW und WrapperY zeigt, dass ein Wrapper auch Teil des Austauschrings des Objekts sein kann. Da ein Wrapper durch die Gültigkeit des Zielobjekts eingeschränkt ist und diese nur weiter einschränken kann, ergibt dies nur begrenzt Sinn.

Die Gültigkeit eines Wrappers bestimmt sich aus der Schnittmenge der des per SpanDateValidity() gesetzten Zeitraums und des Gültigkeitszeitraums des Zielobjekts. Da das Zielobjekt wiederum ein Wrapper sein kann (Bsp: WrapperZ -> WrapperB -> Objekt2), wird die Gültigkeit durch alle Wrapper-Ebenen rekursiv berechnet. Sollen Wrapper und Zielobjekt keine gemeinsamen Daten in ihren Gültigkeitszeiträumen haben, dann hat der Wrapper einen leeren Gültigkeitszeitraum - ist also immer ungültig.

Die Methoden SpanDateValidity(), RestrictedValidity(), Valid, ValidSince, ValidToday & ValidUntil prüfen beim lesenden Zugriff für die Auswertung der Gültigkeit immer auch die Gültigkeit des Zielobjekts. Beim schreibenden Zugriff von RestrictedValidity() und SpanDateValidity() wird nur die Gültigkeit des Wrappers verändert und die Methoden Link, NextValidObject, PreviousValidObject, Siblings(), Unlink, Unlink2 & VerifySiblings beziehen sich nur auf den Austauschring des Wrappers.

 

Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
Contents     OBJECT Fragt das gewrappte Objekt ab
SetContents   OBJECT   Setzt das gewrappte Objekt
Deleted     INTEGER Prüft, ob der Wrapper in der Datenbank logisch gelöscht wurde
GetSiblings     COLLECTION Alle Siblings dieses Objektes.
Abbruch bei Fehler in der Gültigkeitskette.
GetSiblings2     COLLECTION

Alle Siblings dieses Objektes.
Fehler in der Gültigkeitskette werden ignoriert.

GetSlotEntries     VECTOR Rückgabe von internen Informationen zu Slots
LastUpdate     OBJECT Liefert das Datum des letzten Schreibzugriffs auf den Wrapper
Link   CX_TERMED   Das übergebene Objekt wird in die Liste der Austauschobjekte für den Wrapper eingefügt.
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 *     Prüft, ob dem Wrapper oder dem Zielobjekt eine Gültigkeit zugeordnet ist.
SanityCheck     INTEGER Prüft die Konsistenz des Wrappers
Siblings *     Objekte mit Gültigkeit (nur mittels Collection Widget einsetzbar)
SpanDateValidity * STRING   Gültigkeitszeitraum lesen/schreiben
string   INTEGER CX_STRING Liefert die String-Darstellung des Objektes
Unlink       Wrapper aus dem Austauschring des Wrappers entfernen.
Abbruch bei Fehler in der Gültigkeitskette.
Unlink2       Wrapper aus dem Austauschring des Wrappers entfernen.
Fehler in der Gültigkeitskette werden ignoriert.
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 Wrappers
_object POINTER CX_CLASS   Das gewrappte Objekt

* I = Indizierbares Datenfeld,
grau unterlegt = geerbtes Datenfeld

Verwendung in AppsWH
Modul Kurzbeschreibung