Lade...
 

CopyPersObject

CopyPersObject

CopyPersObject(mode, pattern), CopyPersObject(mode), CopyPersObject(, pattern), CopyPersObject

Parameter: ganzzahliger Wert für Kopier-Modus, Bitpattern für Inheritance

Stack
Stack   Beschreibung
Stack(In)   ein Objekt
Stack(Out)   eine persistente Kopie dieses Objekts

Diese Anweisung erzeugt ein persistentes Objekt, das eine Kopie des auf dem Stack vorgefundenen persistenten oder transienten Objekts darstellt. (Siehe auch den InstantView®-Befehl CopyTransObject,  mit dem eine transiente Kopie eines Objekts erzeugt wird und auch die Funktion CopyPersObject() des Objekt Managers.)

Wenn keine Parameter bzw. nur Mode oder nur Pattern übergeben werden, wird für den jeweils fehlenden Parameter der Standardwert angenommen. Dies ist 0 für den Modus sowie -1 für den Pattern.

Wie ein Objekt kopiert wird, bestimmt die Klasse des Objekts (eine detaillierte Beschreibung finden sie hier). Damit für die gleiche Klasse unterschiedliche Modi des Kopierens eingeführt werden können, wird der optional anzugebende Parameter an die virtuelle Funktion PersistentCopy() weitergereicht (Standardwert ist Null).

Wie bei Anweisung CreatePersObject bestimmen die Definition des Datenbanklayouts in CLASSIX.INI, in welchem Segment das Objekt gespeichert und in welche Collections es aufgenommen wird. Dabei sind die mit SetLayer, SetDomain(WRITE) und SetPattern getroffenen Einstellungen bestimmend (siehe Abbildung).

Im ClassiX®-System können verschiedene Strategien für das Clustering der Objekte aktiviert sein. Es gibt Regeln, die entscheiden, ob ein zu erzeugendes Objekt ein Master- oder ein Slave-Objekt ist. Masterobjekte kennen den Ort in der Datenbank, wo sie gespeichert werden. Für Slave-Objekte bestimmt erst ein bereits gespeichertes Objekt, mit dem sie über eine Relation verbunden werden, den Ort in der Datenbank. Für Slave-Objekt wird die Objekterzeugung verzögert: CopyPersObject erzeugt ein Objekt der Klasse CX_LAZY_CREATOR. Dieses Objekt "merkt sich" zunächst nur das zu kopierende Objekt. Das "richtige" persistente Objekt entsteht erst, wenn das CX_LAZY_CREATOR-Objekt mit einem anderen verbunden wird, z.B. mit Anweisungen wie SetReference, Insert ...
Wenn alle Clustering-Strategien deaktiviert sind, gibt es nur Master-Objekte.

Achtung!
Wenn man eine persistente Kopie von einem anderen persistenten Objekt macht, und die Objekte einer Klasse angehören welche normalerweise eine REP-Collection hat, aber in diesem Fall das originale Objekt mit CreatePersObject(CX_XXXXX, 0) angelegt worden ist, also nicht in der REP-Collection steckt, so wird die persistente Kopie trotzdem in die REP-Collection gesteckt wenn man nicht bewusst CopyPersObject(, 0) aufruft !