CX_DESCRIPTIVE_REF
Klassenhierarchie
- CX_CLASS
- CX_SIMPLE
- CX_TERMED
- CX_EXPANDABLE
- CX_DESCRIPTIVE_REF
- CX_EXPANDABLE
- CX_TERMED
- CX_SIMPLE
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:
// 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.
// 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.
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.
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. |
||
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
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
Modul | Kurzbeschreibung |
---|---|