Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation CL_SHM_AREA  Dokument im Navigationsbaum lokalisieren

Gemeinsame Oberklasse aller Gebietsklassen für Gebietshandles von Gebietsinstanzversionen im Shared Memory. Diese Klasse enthält allgemeine Attribute und Methoden für Gebietshandles.

 

Instanzattribute

 

PROPERTIES

Struktur vom Typ SHM_PROPERTIES mit der Eigenschaft READ-ONLY. Die Komponenten der Struktur enthalten Eigenschaften des Gebiets, die in der Regel mit der Transaktion SHMA gesetzt werden. Die Komponenten der Struktur sind:

AUTO_BUILD

Falls diese Komponente den Wert der Konstanten ABAP_TRUE hat, ist ein automatischer Aufbau der Gebietsinstanzversionen des Gebiets möglich. Voraussetzung für den Wert ABAP_TRUE ist, dass die Komponente AUTO_BUILD_CLASS nicht initial ist. Falls sie den Wert ABAP_FALSE hat, ist ein automatischer Aufbau der Gebietsinstanzversionen nicht möglich.

AUTO_BUILD_CLASS

Diese Komponente enthält den Namen der Gebietskonstruktorklasse <area_constructor>, welche über das Interface IF_SHM_BUILD_INSTANCE den Konstruktor BUILD zum automatischen Neuaufbau von Gebietsinstanzversionen implementiert. Diese Komponente ist nur gefüllt, wenn das Gebietshandle mit einer Änderungssperre an eine Gebietsinstanzversion angebunden ist und ansonsten initial.

BUILD_KIND

Diese Komponente steuert, wann Gebietsinstanzversionen des Gebiets automatisch mit Hilfe des Gebietskonstruktors in der Klasse <area_constructor> aufgebaut werden sollen: Falls sie den Wert der Konstanten CL_SHM_AREA=>BUILD_KIND_NONE hat, werden Gebietsinstanzversionen nicht automatisch aufgebaut. Dies ist immer der Fall, wenn die Komponente AUTO_BUILD den Wert von ABAP_FALSE hat. Wenn die Komponente AUTO_BUILD den Wert von ABAP_TRUE hat, kann die Komponente BUILD_KIND die Werte der Konstanten CL_SHM_AREA=>BUILD_KIND_DUE_TO_READ_REQUEST oder CL_SHM_AREA=>BUILD_KIND_DUE_TO_INVALIDATION haben. Falls sie den Wert von CL_SHM_AREA=>BUILD_KIND_DUE_TO_READ_REQUEST hat, und keine aktive Gebietsinstanzversion vorhanden ist, wird der Gebietskonstruktor bei einem Lesezugriff automatisch aufgerufen. Falls sie den Wert der Konstanten CL_SHM_AREA=>BUILD_KIND_DUE_TO_INVALIDATION hat, wird der Gebietskonstruktor wie beim Wert CL_SHM_AREA=>BUILD_KIND_DUE_TO_READ_REQUEST aufgerufen. Weiterhin wird beim Übergang einer aktiven Version zu einer veralteten oder verfallenen Version aufgerufen, ohne dass dabei eine aktive Gebietsinstanzversion entsteht.

CLIENT_DEPENDENT

Falls diese Komponente den Wert der Konstanten ABAP_TRUE hat, ist das Gebiet mandantenabhängig. Gebietsinstanzversionen des gleichen Gebiets werden außer über ihren Namen durch die aktuelle Mandantenkennung im Attribut CLIENT unterschieden. Wenn die Komponente den Wert ABAP_FALSE hat (Standardeinstellung), ist das Gebiet mandantentunabhängig und CLIENT ist initial.

DISPLACE_KIND

Diese Komponente steuert, ob Gebietsinstanzversionen des Gebiets verdrängt werden dürfen. Falls sie den Wert der Konstanten CL_SHM_AREA=>DISPLACE_KIND_NONE hat, sind sie nicht verdrängbar (Standardeinstellung). Falls sie den Wert der Konstanten CL_SHM_AREA=>DISPLACE_KIND_SERIALIZABLE hat (ab Release 7.0), sind sie verdrängbar. Vor dem Verdrängen wird der Inhalt serialisiert und persistent gespeichert und bei einem Lese- oder Aktualisierungszugriff auf die Gebietsinstanzversion wird er wieder in das Shared Memory geladen. Voraussetzung ist, dass jede in der Gebietsinstanz instanzierte Klasse das Interface IF_SERIALIZABLE_OBJECT implementiert. Falls die Komponente den Wert der Konstanten CL_SHM_AREA=>DISPLACE_KIND_DISPLACABLE hat, sind die Gebietsinstanzversionen verdrängbar, wobei der Inhalt bei einer Verdrängung verloren geht (vollständige Verdrängung). Eine Verdrängung findet nur statt, falls gleichzeitig kein Gebietshandle an keine Gebietsinstanzversion der verdrängbaren Gebietsinstanz angebunden ist.

HAS_VERSIONS

Falls diese Komponente den Wert der Konstanten ABAP_TRUE hat, unterstützt das Gebiet die Versionierung. Falls sie den Wert ABAP_FALSE hat, gibt es maximal eine einzige Gebietsinstanzversion.

IDLE_TIME

Diese Komponente legt fest, wie viele Minuten eine Gebietsinstanzversion nach dem Aufheben einer Änderungs- oder Lesesperre im Shared Memory erhalten bleibt, bis sie automatisch gelöscht wird. Wenn der Wert 0 ist (Standardeinstellung), wird die Gebietsinstanzversion nicht automatisch gelöscht. Werte ungleich Null sind nur möglich, wenn die Komponenten INVALIDATE_TIME und REFRESH_TIME beide den Wert 0 haben. Bei transaktionalen Gebieten wird beginnt die Zeitmessung beim ersten Datenbank-Commit nach dem Aufheben einer Sperre mit der Methode DETACH_COMMIT.

INVALIDATE_TIME

Diese Komponente legt fest, nach wie vielen Minuten eine Gebietsinstanzversion nach dem Aufheben einer Änderungssperre veraltet ist. Wenn der Wert 0 ist (Standardeinstellung), veraltet eine Gebietsinstanzversion nie. Werte ungleich Null sind nur möglich, wenn die Komponenten IDLE_TIME und REFRESH_TIME beide den Wert 0 haben. Bei transaktionalen Gebieten wird beginnt die Zeitmessung beim ersten Datenbank-Commit nach dem Aufheben einer Sperre mit der Methode DETACH_COMMIT.

LIFE_CONTEXT

Diese Komponente bestimmt Sichtbarkeit und Lebensdauer der Gebietsinstanzversionen des Gebiets. Wenn sie den Wert der Konstanten CL_SHM_AREA=>LIFE_CONTEXT_APPSERVER hat, leben die Gebietsinstanzversionen solange bis der Applikationsserver heruntergefahren wird (Standardwert). Wenn sie den Wert der Konstanten CL_SHM_AREA=>LIFE_CONTEXT_SESSION hat (ab Release 7.0), leben die Gebietsinstanzen solange bis der letzte externe Modus des aktuellen Benutzers beendet wird. Wenn sie den Wert der Konstanten CL_SHM_AREA=>LIFE_CONTEXT_MODE hat (ab Release 7.0), leben die Gebietsinstanzen solange wie der aktuelle externe Modus. Wenn sie den Wert der Konstanten CL_SHM_AREA=>LIFE_CONTEXT_MEMORY hat (ab Release 7.0), leben die Gebietsinstanzen solange wie die Daten im ABAP Memory der aktuellen Aufrufkette.

MAX_AREA_SIZE

Diese Komponente gibt die maximal zulässige Größe eines Gebiets in KB an, wobei die Größe eines Gebiets der Summe des Speicherbedarfs aller Gebietsinstanzversionen des Gebiets entspricht (ab Release 7.0). Der Standardwert ist zur Zeit 0 und bedeutet keine Größenbeschränkung. Geplant ist, den Standardwert aus der Gesamtgröße des Shared Objects Memory geteilt durch einen Profilparameter zu bestimmen. Wenn die maximale Größe für bestehende Gebietsinstanzversionen kleiner als deren Größe gemacht wird, sind zwar weiterhin Lese- aber keine Änderungszugriffe mehr möglich.

MAX_VERSION_SIZE

Diese Komponente gibt die maximal zulässige Größe einer Gebietsinstanzversion in KB an Der Standardwert ist 0 und bedeutet keine Größenbeschränkung. Falls größer als 0, muss der Wert der Komponente MAX_VERSION_SIZE kleiner oder gleich dem Wert der Komponente MAX_AREA_SIZE sein.

MAX_VERSIONS

Diese Komponente gibt die maximale Anzahl der Gebietsinstanzversionen einer Gebietsinstanz des Gebiets an, wobei veraltete Gebiete nicht mitgezählt werden. Der Standardwert ist 0 und bedeutet keine Beschränkung. Wenn die Komponente HAS_VERSIONS den Wert der Konstanten ABAP_FALSE hat, ist MAX_VERSIONS immer 1. Ansonsten kann MAX_VERSIONS jede nicht negative ganze Zahl ungleich 1 sein.

PROPAGATION_KIND

Diese Komponente legt fest, wie die Methode PROPAGATE_.. der Gebietsklasse <area> zur Propagierung gestartet wird. Wenn sie den Wert der Konstanten CL_SHM_AREA=>PROP_KIND_NONE hat, steht keine Methode PROPAGATE zur Verfügung (Standardeinstellung). Wenn die Komponente TRANSACTIONAL den Wert ABAP_FALSE hat, kann nur dieser Wert angegeben werden. Wenn die Komponente den Wert der Konstanten CL_SHM_AREA=>PROP_KIND_USER_TRIGGERED hat, muss der Verwender die Methode PROPAGATE_... selbst aufrufen. Wenn sie den Wert der Konstanten CL_SHM_AREA=>PROP_KIND_AUTOMATIC hat, wird die Methode PROPAGATE_... bei jeder Änderung eines der in der internen Tabelle DEPENDENCIES der Gebietsklasse <area> angegebenen Elemente automatisch aufgerufen (zur Zeit nicht implementiert).

REFRESH_TIME

Diese Komponente legt fest, nach wie vielen Minuten eine Gebietsinstanzversion durch automatischen Aufruf des Gebietskonstruktors neu aufgebaut wird. Wenn der Wert 0 ist (Standardeinstellung), wird eine Gebietsinstanzversion nie automatisch neu aufgebaut. Werte ungleich Null sind nur möglich, wenn die Komponenten IDLE_TIME und INVALIDATE_TIME beide den Wert 0 haben. Bei transaktionalen Gebieten wird beginnt die Zeitmessung beim ersten Datenbank-Commit nach dem Aufheben einer Sperre mit der Methode DETACH_COMMIT. Voraussetzung für den Neuaufbau ist, dass zum Startzeitpunkt des Neuaufbaus eine aktive Version der Gebietsinstanzversion vorliegt.

TRANSACTIONAL

Falls diese Komponente den Wert der Konstanten ABAP_TRUE hat (Standardeinstellung), ist das Gebiet transaktional. Änderungen an den Gebietsinstanzversionen des Gebiets werden nach Ausführung der Methode DETACH_COMMIT erst mit dem nächsten Datenbank-Commit aktiv. Falls die Komponente den Wert der Konstanten ABAP_FALSE hat ist das Gebiet nicht transaktional und Änderungen sind sofort nach Ausführung der Methode DETACH_COMMIT aktiv.

Die Werte der Komponenten werden in der Regel mit der Verwaltungstransaktion SHMA gesetzt.

 

INST_NAME

Textfeld vom Typ SHM_INST_NAME mit der Eigenschaft READ-ONLY. Dieses Attribut enthält den Namen der aktuellen Gebietsinstanz. Es wird beim Anlegen einer Gebietsinstanz mit der Methode ATTACH_FOR_WRITE der Gebietsklasse <area> gesetzt.

 

CLIENT

Textfeld vom Typ MANDT mit der Eigenschaft READ-ONLY. Dieses Attribut enthält in mandantenabhängigen Gebieten (Komponente CLIENT_DEPENDENT der Struktur PROPERTIES hat den Wert ABAP_TRUE) die aktuelle Mandantenkennung der Gebietsinstanz. In einem mandantenunabhängigen Gebiet ist das Attribut initial.

 

Statische Methoden

 

MULTI_ATTACH

Diese Methode erlaubt es, Lese-, Schreib oder Aktualisierungssperren auf mehrere Gebietsinstanzen eines oder mehrerer Gebiete gleichzeitig zu setzen. Die Methode MULTI_ATTACH ist die einzige Möglichkeit gleichzeitig ändernd auf mehrere Gebietsinstanzen zuzugreifen, d.h. mehrere Änderungssperren auf einmal zu setzen.

Ein-/Ausgabeparameter

·        ATTACH_TAB vom Typ SHM_ATTACH_TAB

Interne Tabelle, deren Zeilen die Informationen zu den einzelnen angeforderten Sperren enthalten. Die Komponenten der Zeilen sind:

¡        AREA_NAME vom Typ SHM_AREA_NAME

Name des Gebiets

¡        INST_NAME vom Typ SHM_INST_NAME

Name der Gebietsinstanz. Soll auf die Gebietsinstanz mit dem Standardnamen zugegriffen werden, muss der Wert der Konstanten CL_SHM_AREA=>DEFAULT_INSTANCE übergeben werden.

¡        CLIENT vom Typ MANDT

Mandantenkennung für mandantenabhängige Gebiete. Soll auf die Gebietsinstanz mit der aktuellen Mandantenkennung zugegriffen werden, muss auch der aktuelle Mandant übergeben werden. Bei mandantenunabhängigen Gebieten, muss die Komponente initial sein.

¡        LOCK_KIND vom Typ SHM_LOCK_KIND

Zugriffsart, mögliche Werte sind die der Konstanten CL_SHM_AREA=>LOCK_KIND_READ, CL_SHM_AREA=>LOCK_KIND_WRITE oder CL_SHM_AREA=>LOCK_KIND_UPDATE.

¡        ATTACH_MODE vom Typ SHM_ATTACH_MODE

Verhalten bei Änderungszugriffen, mögliche Werte sind die der Konstanten CL_SHM_AREA=>ATTACH_MODE_DEFAULT, CL_SHM_AREA=>ATTACH_MODE_DETACH_READER oder CL_SHM_AREA=>ATTACH_MODE_WAIT.

¡        LEVEL vom Typ i

Reihenfolge, in der die Sperren gesetzt werden. Tabellenzeilen mit kleineren Werten in der Spalte LEVEL werden vor Tabellenzeilen mit größeren Werten ausgewertet. Bei gleichen Werten in LEVEL zählt die Reihenfolge der Zeilen in der Tabelle.

¡        HANDLE vom Typ REF TO CL_SHM_AREA

In dieser Spalte wird im Erfolgsfall eine Referenz auf ein Gebietshandle für die Gebietsinstanzversion, für welche die  Sperre angefordert wurde, zurückgegeben. Im Fall einer Ausnahme ist der Wert der Spalte je nach Wert des Eingabeparameters IGNORE_ERRORS für alle oder die betroffenen Zeilen initial.

¡        EXCEPTION vom Typ REF TO CX_ROOT

In dieser Spalte wird im Fall einer Ausnahme je nach Wert des Eingabeparameters IGNORE_ERRORS eine oder alle betroffenen Zeilen eine Referenz auf das Ausnahmeobjekt zurückgegeben. Neben den Ausnahmen der ATTACH-Methoden zum Setzen einzelner Sperren in der Gebietsklasse <area> kann zusätzlich die Ausnahme CX_SHM_MULTI_ATTACH_ERROR auftreten, wenn:

§         auf eine Gebietsinstanzversion gleichzeitig eine Schreib- und Aktualisierungssperre angefordert wird (Ausnahmetext: DUPLICATE_CHANGE_LOCK).

§         auf eine Gebietsinstanzversion mit automatischem Gebietsaufbau eine Sperre für einen vom aktuellen Mandaten verschiedenen Mandanten angefordert wird (Ausnahmetext: ILLEGAL_AUTO_BUILD_CLIENT).

§         eine Mandantenkennung für ein mandantenunabhängiges Gebiet angegeben wird (Ausnahmetext: ILLEGAL_CLIENT_FOR_AREA).

Im Erfolgsfall ist die Spalte initial.

Für mehr Informationen zu einzelnen Komponenten siehe auch die Beschreibung der Parameter der ATTACH-Methoden zum Setzen einzelner Sperren in der Gebietsklasse <area>.

Eingabeparameter

·        IGNORE_ERRORS vom Typ ABAP_BOOL

Steuert die Fehlerbehandlung der Methode. Mögliche Werte sind die der Konstanten ABAP_TRUE und ABAP_FALSE.

Falls der Wert von ABAP_TRUE übergeben wird, wird nach einer Ausnahme beim Setzen einer Sperre versucht, die restlichen Sperren zu setzen. In den Zeilen des Parameters ATTACH_TAB, in welchen ein Fehler aufgetreten ist, wird die Referenz auf das Gebietshandle in der Spalte HANDLE initialisiert und die Referenz in der Spalte EXCEPTION auf das zugehörige Ausnahmeobjekt gesetzt.

Falls der Wert von ABAP_FALSE übergeben wird, wird die Methode nach einer Ausnahme beim Setzen einer Sperre abgebrochen. Die Spalten HANDLE in allen Zeilen des Parameters ATTACH_TAB initialisiert. In der Zeile, in welcher der Fehler aufgetreten ist, wird die Referenz in der Spalte EXCEPTION auf das zugehörige Ausnahmeobjekt gesetzt.

Alle Gebietsinstanzen, für die in der Methode MULTI_ATTACH ein Fehler auftritt, befinden sich nach Beendigung der Methode im gleichen Zustand wie vor dem Aufruf der Methode, d.h. die vorherigen Sperren und der Status bleiben erhalten.

·        WAIT_TIME vom Typ i

Gibt die Wartezeit in Millisekunden für alle Zeilen des Parameters ATTACH_TAB an, bei denen in der Spalte ATTACH_MODE der Wert CL_SHM_AREA=>ATTACH_MODE_WAIT angegeben ist. Die Wartezeit muss größer gleich 0 sein und wird auf die entsprechenden Sperranforderungen aufgeteilt. Wenn mehrere Änderungssperren gesetzt werden sollen und die erste Sperre innerhalb der Wartezeit gesetzt werden kann, bleibt die restliche Wartezeit für die übrigen Sperren. Bei jeder Auswertung einer solchen Zeile wird also die noch für die restlichen Zeilen zur Verfügung stehende Wartezeit um die verbrauchte Zeit verringert.

Achtung

Für mit MULTI_ATTACH gesetzte Änderungssperren mit Wartezeit gelten die gleichen gegenseitigen Ausschlüsse wie bei den Methoden  ATTACH_FOR_WRITE und ATTACH_FOR_UPDATE der Gebietsklasse, was unter Umständen das Setzen von Sperren verhindert. Wenn beispielsweise in zwei Programmen parallel ein MULTI_ATTACH mit Wartezeit ausgeführt wird, wobei Programm 1 zuerst eine Änderungssperre A und dann eine Änderungssperre B setzt, Programm 2 dies in umgekehrter Reihenfolge macht und das Setzen der Sperre A in Programm 1 und der Sperre B in Programm 2 gelingt, kann mindestens eine zweite Sperre nicht gesetzt werden. Bei der Sperranforderung für die zweite Sperre (Sperre B in Programm 1 und Sperre A in Programm 2) muss jedes Programm darauf warten, dass die Wartezeit des anderen Programms abgelaufen ist.

Ausgabeparameter

·        ERROR_FLAG vom Typ ABAP_BOOL

Zeigt an, ob es während der Methode zu einer oder mehreren Ausnahme kam. Wenn ERROR_FLAG den Wert der Konstanten ABAP_FALSE hat, konnten alle Sperren erfolgreich gesetzt werden.

Wenn ERROR_FLAG den Wert der Konstanten ABAP_TRUE hat, konnten nicht alle Sperren gesetzt werden und je nach Wert des Eingabeparameters IGNORE_ERRORS enthalten eine oder mehrere Zeilen der Spalte EXCEPTION des Parameters ATTACH_TAB Referenzen auf das bzw. die Ausnahmeobjekte.

 

DETACH_ALL_AREAS

Diese Methode hebt alle Sperren des aktuellen internen Modus auf beliebigen Gebietsinstanzversionen beliebiger Gebiete auf und deaktiviert somit alle Gebietshandles des internen Modus. Wird dabei eine Schreib- oder Aktualisierungssperre aufgehoben, werden bis dahin gemachte Änderungen an Gebietsinstanzversionen verworfen.

Rückgabewert

·        RC vom Typ SHM_RC

Mögliche Werte:

¡        CL_SHM_AREA=>RC_DONE, wenn alle Sperren aufgehoben wurden.

¡        CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE, wenn keine Sperren aufgehoben wurden, da keine bestanden.

Hinweis

Die Methode DETACH_ALL_AREAS benötigt keinen Eingabeparameter für die Mandantenkennung, da sie unabhängig vom Mandanten sowohl auf mandantenabhängige als auch auf mandantenunabhängige Gebietsinstanzen zugreift. Um alle Sperren auf einem speziellen Mandanten löschen, muss man einzeln auf die entsprechenden Gebietshandles zugreifen, wobei sich deren Verwaltung in einer internen Tabelle anbietet.

 

Instanzmethoden

 

DETACH

Diese Methode hebt die Lesesperre des aktuellen Gebietshandles auf. Danach ist das Gebietshandle inaktiv.

Ausnahmen

·        CX_SHM_WRONG_HANDLE

Es war keine Lese- sondern eine Änderungssperre aktiv (Ausnahmetext: READ_HANDLE_REQUIRED)

·        CX_SHM_ALREADY_DETACHED

Es war keine Lesesperre aktiv.

Beide Ausnahmeklassen erben von CX_DYNAMIC_CHECK.

 

DETACH_COMMIT

Diese Methode hebt eine Änderungssperre (Schreib- oder Aktualisierungssperre) des aktuellen Gebietshandles auf und bestätigt die gemachten Änderungen. Danach ist das Gebietshandle inaktiv. Voraussetzung ist, dass die aktuelle Gebietsinstanzversion eine Instanz der Gebietswurzelklasse (Wurzelobjekt) enthält und dass es aus der Gebietsinstanzversion keine Referenzen in eine andere Gebietsinstanz des Shared Objects Memory oder in den internen Modus gibt.

Kommt es bei Ausführung der Methode zu einer Ausnahme, wird die Änderungssperre nicht ordnungsgemäß aufgehoben. Sie bleibt zwar bestehen, kann aber nicht ein zweites Mal mit der Methode DETACH_COMMIT freigegeben werden. Statt dessen kann die Methode DETACH_ROLLBACK verwendet werden.

·        Bei transaktionalen Gebieten mit Versionierung greifen alle angeforderten Lesesperren noch auf die vorherige Version zu.

·        Bei transaktionalen Gebieten ohne Versionierung ist kein Lesezugriff möglich.

·        Weder bei Gebieten mit Versionierung noch bei Gebieten ohne Versionierung ist das Setzen einer neuen Änderungssperre möglich.

Bei Aufruf der Methode DETACH_COMMIT wird vor ihrer Ausführung automatisch das Ereignis SHM_COMMIT_EVENT der generierten Gebietsklasse ausgelöst.

Ausnahmen

·        CX_SHM_WRONG_HANDLE

Es war keine Änderungs- sondern eine Lesesperre aktiv (Ausnahmetext: WRITE_HANDLE_REQUIRED)

·        CX_SHM_ALREADY_DETACHED

Es war keine Änderungssperre aktiv.

·        CX_SHM_COMPLETION_ERROR

Unterklassen:

¡        CX_SHM_ROOT_OBJECT_INITIAL

Der Gebietsinstanzversion wurde kein Wurzelobjekt zugewiesen.

¡        CX_SHM_EXTERNAL_REFERENCE

Es gibt noch Referenzen aus der aktuellen Gebietsinstanzversion in eine andere Gebietsinstanz des Shared Objects Memory oder in den internen Modus.

¡        CX_SHM_EVENT_EXECUTION_FAILED

Bei Ausführung eines Ereignisbehandlers für SHM_COMMIT_EVENT trat eine Ausnahme auf. Auf die aufgetretene Ausnahme kann über das Attribut PREVIOUS zugegriffen werden.

·        CX_SHM_SECONDARY_COMMIT

Es wurde versucht, eine Änderungssperre, deren Aufhebung fehlgeschlagen war, nochmals mit DETACH_COMMIT statt mit DETACH_ROLLBACK freizugeben.

Alle Ausnahmeklassen erben von CX_DYNAMIC_CHECK. CX_SHM_COMPLETION_ERROR und CX_SHM_SECONDARY_COMMIT sind Unterklassen von CX_SHM_DETACH_ERROR.

 

DETACH_ROLLBACK

Diese Methode hebt eine Änderungssperre (Schreib- oder Aktualisierungssperre) des aktuellen Gebietshandles auf und verwirft die gemachten Änderungen. Danach ist das Gebietshandle inaktiv.

Bei Gebieten ohne Versionierung liegt nach Ausführung der Methode keine aktive Version des Gebiets mehr vor. Bei Gebieten mit Versionierung steht weiterhin die vorhergehende Version zur Verfügung. Bei transaktionalen Gebieten kann nach Ausführung der Methode DETACH_ROLLBACK auch vor dem nächsten Datenbank-Commit eine neue Änderungssperre auf die betreffende Gebietsinstanz gesetzt werden.

Bei Aufruf der Methode DETACH_ROLLBACK wird vor ihrer Ausführung automatisch das Ereignis SHM_ROLLBACK_EVENT ausgelöst.

Ausnahmen

·        CX_SHM_WRONG_HANDLE

Es war keine Änderungs- sondern eine Lesesperre aktiv (Ausnahmetext: WRITE_HANDLE_REQUIRED)

·        CX_SHM_ALREADY_DETACHED

Es war keine Änderungssperre aktiv.

·        CX_SHM_EVENT_EXECUTION_FAILED

Bei Ausführung eines Ereignisbehandlers für SHM_ROLLBACK_EVENT trat eine Ausnahme auf. Auf die aufgetretene Ausnahme kann über das Attribut PREVIOUS zugegriffen werden.

Alle Ausnahmeklassen erben von CX_DYNAMIC_CHECK. CX_SHM_EVENT_EXECUTION_FAILED ist Unterklasse von CX_SHM_COMPLETION_ERROR, die Unterklasse von CX_SHM_DETACH_ERROR ist.

 

GET_LOCK_KIND

Diese Methode gibt für ein Gebietshandle die Art der aktuellen Sperre zurück.

Rückgabewert

·        LOCK_KIND vom Typ SHM_LOCK_KIND

Mögliche Werte:

¡        CL_SHM_AREA=>LOCK_KIND_READ, wenn das Gebietshandle eine Lesesperre hält.

¡        CL_SHM_AREA=>LOCK_KIND_WRITE, wenn das Gebietshandle eine Schreibsperre hält.

¡        CL_SHM_AREA=>LOCK_KIND_UPDATE, wenn das Gebietshandle eine Aktualisierungssperre hält.

¡        CL_SHM_AREA=>LOCK_KIND_COMPLETION_ERROR, wenn das Gebietshandle eine Änderungssperre hält, nachdem die Methode DETACH_COMMIT mit einer Ausnahme beendet wurde.

¡        CL_SHM_AREA=>LOCK_KIND_DETACHED, wenn das Gebietshandle keine Sperre hält bzw. nicht an eine Gebietsinstanzversion angebunden ist.

GET_ROOT

Diese Methode gibt für ein Gebietshandle eine Referenz auf das Wurzelobjekt (Instanz der Gebietswurzelklasse) zurück. Die Methode ist nur für den Ausnahmefall vorgesehen, wenn man generisch mit mehreren Gebietshandles für unterschiedliche Gebiete mit unterschiedlichen Gebietswurzelklassen umgehen muss. Ansonsten kann direkt auf das Attribut ROOT der Gebietsklasse <area> zugegriffen werden.

Rückgabewert

·        ROOT vom Typ REF TO OBJECT

Ausnahmen

·        CX_SHM_ALREADY_DETACHED

Das Gebietshandle ist nicht an eine Gebietsinstanzversion angebunden.

 

Instanzereignisse

 

SHM_COMMIT_EVENT

Dieses Ereignis wird vom Gebietshandle automatisch bei Aufruf der Methode DETACH_COMMIT ausgelöst.

 

SHM_ROLLBACK_EVENT

Dieses Ereignis wird vom Gebietshandle automatisch bei Aufruf der Methode DETACH_ROLLBACK ausgelöst.

 

 

Ende des Inhaltsbereichs