Lade...
 

SetReference

SetReference

SetReference(zugriffsAusdruck), SetReference(zugriffsAusdruck, backRef), SetReference(STACK, STACK)

Parameter:  ein Zugriffsausdruck, Name der Rückreferenz.

Stack
Stack Position Beschreibung
Stack(In) Top Zielobjekt
  Top-1 referenziertes Objekt
Stack(Out) Top -

Achtung!
veraltet, bitte Link benutzen 

Der vom Zielobjekt ausgehend über den Zugriffsausdruck erreichte Pointer p soll nach dieser Operation auf das Objekt auf Stack-Top-1 zeigen.
Wenn der im Zielobjekt ausgewählte Pointer im DDI als 1-1- oder 1-m-Referenz deklariert wurde, muss der Name einer Rückreferenz als zweiter Operand angegeben werden.

setreference.bmp (665670 Byte)

Ist p != NULL (vor der Operation), wird zunächst die bisherige gültige Rückreferenz aufgelöst. Danach werden p und die (neue) Rückreferenz (Pointer oder Collection) gesetzt. SetReference wird von Einträgen im DDI gesteuert und bricht mit einem Fehler ab, wenn versucht wird, eine den im DDI getroffenen Festlegungen widersprechende Referenz aufzubauen. Dies ist der Fall, wenn 

  • der Datentyp des zu referenzierenden Objekts nicht zu dem im DDI eingetragenen Referenz-Datentyp passt  (d.h. das zu referenzierende Objekt ist keine Instanz der im DDI eingetragenen oder einer davon abgeleiteten Klasse)
  • das Pointer p enthaltende Objekt o nicht zu dem im DDI eingetragenen BackReferenz-Datentyp paßt (d.h. Objekt o ist keine Instanz der im DDI als Backreference-Typ eingetragenen oder einer davon abgeleiteten Klasse)
  • die zum Beginn der Operation vorgefundene Referenz hinsichtlich Hin- oder Rückreferenz einen Typwiderspruch zum DDI enthält
  • bei einer 1-1-Relation die Rückreferenz gar nicht auf Objekt o zeigt
  • bei einer 1-m-Relation Objekt o kein Element der Backreference-Collection ist.

Ein persistentes Objekt darf nie ein transientes Objekt referenzieren, dies betrifft Hin- und Rückreferenz. Folgende Referenzen sind erlaubt:

  transient persistent
transient erlaubt mit Einschränkungen erlaubt
persistent verboten erlaubt

Ein transientes Objekt darf ein persistentes referenzieren, wenn

  • der Pointer ein dynamisches Datenfeld und
  • vom Typ POINTER ist (REL_11 bzw. REL_1M würden eine Rückreferenz vom persistenten zum transienten Objekt erzwingen, und dies ist verboten).

Hinweis:  Wenn ein persistentes Objekt an der Operation teilnimmt, beginnt eine Transaktion.