CX_LOOSE_REF
Klassenhierarchie
Beschreibung:
Diese Klasse wird verwendet um lose Referenzen zwischen Objekten herzustellen. Dabei wird kein fester Pointer verwendet um das Zielobjekt zu erreichen, stattdessen werden am Loose-Ref-Objekt gespeicherte benutzerdefinierte Kennzeichen verwendet, um das Zielobjekte zu finden. Auf diese Art lassen sich relationale Verbindungen zwischen Objekten herstellen (Beziehungen, die aufgrund von Attribut-Werten hergestellt werden). Die benutzerdefinierten Kennzeichen dienen als Fremdschlüssel, um das Zielobjekt zu finden.
Wenn Objekte dieser Klasse als Wrapper die Beziehungen zu anderen Objekten hergestellt haben, treten Sie für den Benutzer nicht mehr in Erscheinung. Stattdessen reichen sie alle Anfragen für Methodenaufrufe oder Attribute an das Zielobjekt weiter. Bei Änderungen an Attributen verhält sich das CX_LOOSE_REF-Objekt wie ein CX_OVERWRITING_REF, d.h die Änderungen werden als anonyme Slots an dem Wrapper gespeichert. Dadurch kann auf die Daten zugegriffen werden auch wenn das Zielobjekt nicht erreichbar ist, und man kann herausfinden, welche Daten des Zielobjektes über den Weg des Wrappers geändert worden sind.
Folgende Eigenschaften eines CX_LOOSE_REF-Objektes werden verwendet, um das Zielobjekt aufzulösen:
- eine Typisierung mittels looseTypeEnum
- Messages, die zum Auflösen beim Lesen und beim Schreiben gesendet werden
- Modus (online/offline), mit dem bestimmt wird, ob das Zielobjekt aufgelöst werden soll.
Die Verwaltung der CX_LOOSE_REF-Objekte übernimmt der CX_LOOSE_REF_MANAGER. Bei diesem werden auch die Messages angemeldet, die für verschiedene looseTypeEnums verwendet werden sollen.
Die Auflösung des Zielobjekts beim Zugriff auf Attribute oder Methoden geschieht nur im Online-Modus. Befindet sich ein Objekt dieser Klasse im Offline-Modus, so werden nur Attribute des CX_LOOSE_REF-Objekts angefasst. Dieser Modus ist nötig, um zunächst die Werte für looseTypeEnum und die benutzerdefinierten Slots (die Fremdschlüsselattribute) setzen zu können. Gäbe es diesen Offline-Modus nicht, würde auch beim Versuch, auf ein neu erstelltes Objekt zuzugreifen um die Fremdschlüssel zu setzen, das Ziel aufgelöst und ein Fehler verursacht werden.
Beim Auflösen des Zielobjekts wird eine Message gesendet (abhängig vom looseTypeEnum), die als Parameter das CX_LOOSE_REF-Objekt und ein CX_BOOLEAN Objekt hat. Die Reaktion auf so eine Message muss wie folgt implementiert werden:
- Die Attribute (aus dem LOOSE_REF-Objekt) werden geholt und mit deren Hilfe ein neues (beliebiges) Objekt erzeugt oder gesucht.
- Dieses Objekt wird mit der Methode SetObject an das CX_LOOSE_REF-Objekt gebunden
- das CX_BOOLEAN Objekt wird auf TRUE gesetzt (oder auf FALSE, wenn die Auflösung nicht funktioniert hat)
Code-Beispiel:
Funktion | MA* | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|---|
_Object | OBJECT | Liefert das Zielobjekt des Wrappers (im Online-Modus) | ||
SetObject | Macht dem Wrapper sein Zielobjekt bekannt. | |||
SetOffline | Setzt den Wrapper in den Offline-Modus | |||
SetOnline | Setzt den Wrapper in den Online-Modus | |||
Deleted | INTEGER | |||
GetSiblings | COLLECTION | Alle Siblings dieses Objektes | ||
GetSiblings2 | COLLECTION | Alle Siblings dieses Objektes | ||
GetSlotEntries | VECTOR |
Rückgabe von internen Informationen zu Slots | ||
LastUpdate | OBJECT | Datum des letzten Schreibzugriffs | ||
LastUser | INTEGER | |||
Link | OBJECT | Dieses Objekt in die Liste der Objekte mit Gültigkeit einfügen | ||
NextValidObject | OBJECT | Zeitlich nachfolgendes Gültigkeitsobjekt | ||
Overwritten | Namen der überschriebenen Slots und Datenfelder | |||
PreviousValidObject | OBJECT | Zeitlich vorangehendes Gültigkeitsobjekt | ||
ReferenceCount | INTEGER | Anzahl Referenzierungen | ||
RestrictedValidity | * | Gültigkeitsbereich eingeschränkt? | ||
SanityCheck | INTEGER | Prüfung auf Konsistenz des Objektes | ||
SpanDateValidity | * | Gültigkeitsspanne | ||
Siblings | * | Objekte mit Gültigkeit | ||
Unlink | Dieses Objekt aus der Liste der Objekte mit Gültigkeit entfernen | |||
Unlink2 | Dieses Objekt aus der Liste der Objekte mit Gültigkeit entfernen | |||
VerifySiblings0 | INTEGER | Ring der Austauschobjekte prüfen |
* MA = Member-Access-Funktion,
grau unterlegt = geerbte Funktion
Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung |
---|---|---|---|---|
looseTypeEnum | CHAR | Enum, die den Typ des LOOSE_REF-Objekts angibt | ||
_online | INTEGER | 1 falls die CX_LOOSE_REF online ist 0 falls die CX_LOOSE_REF offline ist |
||
_classID | INTEGER | In der geerbten Klasse classID | ||
_uniqueID | STRING | in der geerbten Klasse uniqueID |
* I = Indizierbares Datenfeld,
grau unterlegt = geerbtes Datenfeld
Modul | Kurzbeschreibung |
---|---|