Lade...
 

CX_LOOSE_REF

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:

  1. Die Attribute (aus dem LOOSE_REF-Objekt) werden geholt und mit deren Hilfe ein neues (beliebiges) Objekt erzeugt oder gesucht.
  2. Dieses Objekt wird mit der Methode SetObject an das CX_LOOSE_REF-Objekt gebunden
  3. das CX_BOOLEAN Objekt wird auf TRUE gesetzt (oder auf FALSE, wenn die Auflösung nicht funktioniert hat)
Code-Beispiel:
...
Methodenverzeichnis (MDI)
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     VECTORject> 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

 

Datenverzeichnis (DDI)
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

Verwendung in AppsWH
Modul Kurzbeschreibung