Gebietsklassen werden beim Anlegen eines gleichnamigen Gebiets <area> mit der Transaktion SHMA als Unterklassen der Klasse CL_SHM_AREA generiert. Die Instanzen von Gebietsklassen sind Gebietshandles für Gebietsinstanzversionen.
Gebietsklassen können im Class Builder angezeigt, dürfen aber nicht geändert werden. Der Aufbau einer Gebietsklasse richtet sich nach der Definition des Gebiets in der Transaktion SHMA. Nach einer Änderung der Eigenschaften eines Gebiets wird die Gebietsklasse gegebenenfalls neu generiert.
Konstante vom Typ SHM_AREA_NAME: Enthält den Namen <area> der aktuellen Klasse bzw. des Gebiets.
Referenzvariable vom Typ REF TO <area_root_class>, wobei <area_root_class> die Gebietswurzelklasse des Gebiets ist. Dieses Attribut hat die Eigenschaft READ-ONLY und dient dem direkten Lesezugriff auf das Wurzelobjekt einer Gebietsinstanzversion. Ein Zugriff mit der Methode GET_ROOT ist nur in Ausnahmefällen, z.B. bei der generischen Programmierung, nötig.
Diese Methode erzeugt ein Gebietshandle mit Lesesperre für eine Gebietsinstanzversion und gibt eine Referenz auf das Gebietshandle zurück.
· INST_NAME vom Typ SHM_INST_NAME
Name der Gebietsinstanzversion. Die Angabe des Namens ist optional. Der Standardwert ist der Wert der Konstante CL_SHM_AREA=>DEFAULT_INSTANCE.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Die Angabe der Mandantenkennung ist optional. Der Standardwert ist die Kennung des aktuellen Mandanten.
· HANDLE vom Typ REF TO <area>.
Referenz auf das erzeugte Gebietshandle.
· CX_SHM_INCONSISTENT
Der Typ eines in der Gebietsinstanz gespeicherten Objekts stimmt nicht mit der Definition des gleichnamigen Objekts im aktuellen Programm überein.
· CX_SHM_NO_ACTIVE_VERSION
Diese Ausnahme tritt in folgenden Fällen auf:
¡ Die Gebietsinstanzversion ist nicht vorhanden und ein automatischer Aufbau ist nicht möglich, da kein Gebietskonstruktor oder keine verdrängte Version vorliegt (Ausnahmetext: NEITHER_BUILD_NOR_LOAD).
¡ Die Gebietsinstanzversion ist nicht vorhanden und der Gebietskonstruktor wurde aufgerufen (Ausnahmetext: BUILD_STARTED).
¡ Die Gebietsinstanzversion ist nicht vorhanden aber der Gebietskonstruktor wird bereits ausgeführt (Ausnahmetext: BUILD_NOT_FINISHED).
¡ Die Gebietsinstanzversion ist nicht vorhanden und das Laden einer verdrängten Version wurde gestartet (Ausnahmetext: LOAD_STARTED).
¡ Die Gebietsinstanzversion ist nicht vorhanden aber das Laden einer verdrängten Version wird bereits ausgeführt (Ausnahmetext: LOAD_NOT_FINISHED).
· CX_SHM_READ_LOCK_ACTIVE
Die Gebietsinstanzversion ist bereits im gleichen internen Modus zum Lesen gesperrt.
· CX_SHM_EXCLUSIVE_LOCK_ACTIVE
Diese Ausnahme tritt in folgenden Fällen auf:
¡ Die Gebietsinstanz unterstützt keine Versionierung und ist bereits zum Ändern gesperrt (Ausnahmetext: LOCKED_BY_ACTIVE_CHANGER).
¡ Die Gebietsinstanz unterstützt keine Versionierung und ein Änderer wartet auf eine Änderungssperre (Ausnahmetext: LOCKED_BY_PENDING_CHANGER).
¡ Die Gebietsinstanz ist transaktional, unterstützt keine Versionierung und eine Änderungssperre wurde freigegeben, aber der Datenbank-Commit ist noch nicht erfolgt (Ausnahmetext: WAITING_FOR_DB_COMMIT).
· CX_SHM_PARAMETER_ERROR
Für den Eingabeparameter CLIENT wurde der Wert von CL_SHM_AREA=>ALL_CLIENTS angegeben.
Die ersten vier Ausnahmeklassen sind Unterklassen von CX_SHM_ATTACH_ERROR, die selbst von CX_STATIC_CHECK erbt. CX_SHM_PARAMETER_ERROR ist Unterklasse von CX_DYNAMIC_CHECK.
Diese Methode erzeugt ein Gebietshandle mit Schreibsperre für eine Gebietsinstanzversion und gibt eine Referenz auf das Gebietshandle zurück.
· INST_NAME vom Typ SHM_INST_NAME
Name der Gebietsinstanzversion. Die Angabe des Namens ist optional. Der Standardwert ist der Wert der Konstante CL_SHM_AREA=>DEFAULT_INSTANCE.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Die Angabe der Mandantenkennung ist optional. Der Standardwert ist die Kennung des aktuellen Mandanten.
· ATTACH_MODE vom Typ SHM_ATTACH_MODE
Steuert den Sperrmodus. Die Angabe ist optional. Der Standardwert ist CL_SHM_AREA=>ATTACH_MODE_DEFAULT. Mögliche Werte sind:
¡ CL_SHM_AREA=>ATTACH_MODE_DEFAULT
Wenn Lesesperren auf der Gebietsinstanz des angegebenen Namens bestehen, werden diese nicht aufgehoben. In einem solchen Fall wird bei Gebieten mit Versionierung versucht, eine neue Version anzulegen, während es bei Gebieten ohne Versionierung direkt zur Ausnahme CX_SHM_VERSION_LIMIT_EXCEEDED kommt.
¡ CL_SHM_AREA=>ATTACH_MODE_DETACH_READER
Wenn bei Gebieten mit Versionierung Lesesperren auf allen Gebietsinstanzversionen des angegebenen Namens bestehen, werden die Lesesperren auf der ältesten Version aufgehoben und diese damit deaktiviert, wodurch eine neue Version angelegt werden kann. Bei Gebieten ohne Versionierung werden alle Lesesperren aufgehoben.
¡ CL_SHM_AREA=>ATTACH_MODE_WAIT
Wenn die Schreibsperre nicht gesetzt werden kann, wartet das Programm um die im Parameter WAIT_TIME angegebene Zeit und versucht erneut die Sperre zu setzen, bevor es zur Ausnahme CX_SHM_VERSION_LIMIT_EXCEEDED kommt. Bei einem Gebiet ohne Versionierung kann in der Wartezeit keine weitere Lesesperre auf die Gebietsinstanz gesetzt werden. Bei einem Gebiet mit Versionierung ist das Setzen von Lesesperren weiterhin möglich.
· WAIT_TIME vom Typ i
Wartezeit in Millisekunden, falls für ATTACH_MODE der Wert von CL_SHM_AREA=>ATTACH_MODE_WAIT übergeben wird. Wird für WAIT_TIME ein Wert ungleich 0 übergeben, wenn an ATTACH_MODE nicht der Wert CL_SHM_AREA=>ATTACH_MODE_WAIT übergeben wird oder wenn für WAIT_TIME ein negativer Wert angegeben ist, kommt es zur Ausnahme CX_SHM_PARAMETER_ERROR.
In der Wartezeit wird versucht wird eine Schreibsperre erneut zu setzen. Auf einer Gebietsinstanz kann zu einem Zeitpunkt nur ein Programm mit dem Parameter WAIT_TIME warten. Wenn ein anderes Programm versucht, eine weitere Änderungssperre mit dem Parameter WAIT_TIME zu setzen, so kommt es direkt zur Ausnahme CX_SHM_EXCLUSIVE_LOCK_ACTIVE (Ausnahmetext LOCKED_BY_PENDING_CHANGER).
Kann die Schreibsperre innerhalb der Wartezeit erfolgreich gesetzt werden, wird der Programmablauf fortgesetzt. Dabei ist zu beachten, dass das wartende Programm unter Umständen nicht sofort wieder gestartet wird, sondern es zu einer zeitlichen Verzögerung kommen kann. Während dieser Verzögerung kann ein anderes Programm keine Änderungssperre setzen. Dadurch erhält das wartende Programm garantiert als nächster die Schreibsperre.
Kann die Schreibsperre innerhalb der Wartezeit nicht erfolgreich gesetzt werden, wird nach Ablauf der Wartezeit die Ausnahme CX_SHM_EXCLUSIVE_LOCK_ACTIVE (Ausnahmetext: LOCKED_BY_ACTIVE_CHANGER) ausgelöst.
· HANDLE vom Typ REF TO <area>.
Referenz auf das erzeugte Gebietshandle.
· CX_SHM_VERSION_LIMIT_EXCEEDED
Die Schreibsperre konnte nicht gesetzt werden, da bereits eine Lesesperre auf der Gebietsinstanzversion besteht und keine neue Version erzeugt werden konnte, da dies die Anzahl der maximal möglichen Versionen überschreiten würde.
· CX_SHM_CHANGE_LOCK_ACTIVE
Eine beliebige Gebietsinstanzversion ist bereits im gleichen internen Modus zum Ändern gesperrt. Wenn bei einem transaktionalen Gebiet eine vorhergehende Änderungssperre aufgehoben wurde, aber noch kein Datenbank-Commit stattfand, wird die Ausnahme mit dem Ausnahmetext WAITING_FOR_DB_COMMIT ausgelöst.
· CX_SHM_EXCLUSIVE_LOCK_ACTIVE
Diese Ausnahme tritt in folgenden Fällen auf:
¡ Die Gebietsinstanz ist in einem anderen internen Modus bereits zum Ändern gesperrt (Ausnahmetext: LOCKED_BY_ACTIVE_CHANGER).
¡ Ein Änderer in einem anderen internen Modus wartet auf eine Änderungssperre (Ausnahmetext: LOCKED_BY_PENDING_CHANGER).
¡ Die Gebietsinstanz ist transaktional und eine Änderungssperre wurde in einem anderen internen Modus freigegeben, aber der Datenbank-Commit ist noch nicht erfolgt (Ausnahmetext: WAITING_FOR_DB_COMMIT).
· CX_SHM_PARAMETER_ERROR
¡ Für den Eingabeparameter ATTACH_MODE wurde ein ungültiger Wert übergeben.
¡ Für den Eingabeparameter WAIT_TIME wurde eine negative Zahl übergeben.
¡ Für den Eingabeparameter CLIENT wurde der Wert von CL_SHM_AREA=>ALL_CLIENTS angegeben.
Die ersten drei Ausnahmeklassen sind Unterklassen von CX_SHM_ATTACH_ERROR, die selbst von CX_STATIC_CHECK erbt. CX_SHM_PARAMETER_ERROR ist Unterklasse von CX_DYNAMIC_CHECK.
Diese Methode erzeugt ein Gebietshandle mit Aktualisierungssperre für eine Gebietsinstanzversion und gibt eine Referenz auf das Gebietshandle zurück.
· INST_NAME vom Typ SHM_INST_NAME
Name der Gebietsinstanzversion. Die Angabe des Namens ist optional. Der Standardwert ist der Wert der Konstante CL_SHM_AREA=>DEFAULT_INSTANCE.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Die Angabe der Mandantenkennung ist optional. Der Standardwert ist die Kennung des aktuellen Mandanten.
· ATTACH_MODE vom Typ SHM_ATTACH_MODE
Steuert den Sperrmodus. Die Angabe ist optional. Der Standardwert ist CL_SHM_AREA=>ATTACH_MODE_DEFAULT. Mögliche Werte sind:
¡ CL_SHM_AREA=>ATTACH_MODE_DEFAULT
Wenn Lesesperren auf der Gebietsinstanz des angegebenen Namens bestehen, werden diese nicht aufgehoben. In einem solchen Fall wird bei Gebieten mit Versionierung versucht, eine neue Version anzulegen, während es bei Gebieten ohne Versionierung direkt zur Ausnahme CX_SHM_VERSION_LIMIT_EXCEEDED kommt.
¡ CL_SHM_AREA=>ATTACH_MODE_DETACH_READER
Wenn bei Gebieten mit Versionierung Lesesperren auf allen Gebietsinstanzversionen des angegebenen Namens bestehen, werden die Lesesperren auf der ältesten Version aufgehoben und diese damit deaktiviert, wodurch eine neue Version angelegt werden kann. Bei Gebieten ohne Versionierung werden alle Lesesperren aufgehoben.
¡ CL_SHM_AREA=>ATTACH_MODE_WAIT
Wenn die Aktualisierungssperre nicht gesetzt werden kann, wartet das Programm um die im Parameter WAIT_TIME angegebene Zeit und versucht erneut die Sperre zu setzen, bevor es zur Ausnahme CX_SHM_VERSION_LIMIT_EXCEEDED kommt. Bei einem Gebiet ohne Versionierung kann in der Wartezeit keine weitere Lesesperre auf die Gebietsinstanz gesetzt werden. Bei einem Gebiet mit Versionierung ist das Setzen von Lesesperren weiterhin möglich.
· WAIT_TIME vom Typ i
Wartezeit in Millisekunden, falls für ATTACH_MODE der Wert von CL_SHM_AREA=>ATTACH_MODE_WAIT übergeben wird. Wird für WAIT_TIME ein Wert ungleich 0 übergeben, wenn an ATTACH_MODE nicht der Wert CL_SHM_AREA=>ATTACH_MODE_WAIT übergeben wird oder wenn für WAIT_TIME ein negativer Wert angegeben ist, kommt es zur Ausnahme CX_SHM_PARAMETER_ERROR.
In der Wartezeit wird versucht wird eine Aktualisierungssperre erneut zu setzen. Auf einer Gebietsinstanz kann zu einem Zeitpunkt nur ein Programm mit dem Parameter WAIT_TIME warten. Wenn ein anderes Programm versucht, eine weitere Änderungssperre mit dem Parameter WAIT_TIME zu setzen, so kommt es direkt zur Ausnahme CX_SHM_EXCLUSIVE_LOCK_ACTIVE (Ausnahmetext LOCKED_BY_PENDING_CHANGER).
Kann die Aktualisierungssperre innerhalb der Wartezeit erfolgreich gesetzt werden, wird der Programmablauf fortgesetzt. Dabei ist zu beachten, dass das wartende Programm unter Umständen nicht sofort wieder gestartet wird, sondern es zu einer zeitlichen Verzögerung kommen kann. Während dieser Verzögerung kann ein anderes Programm keine Änderungssperre setzen. Dadurch erhält das wartende Programm garantiert als nächster die Aktualisierungssperre.
Kann die Aktualisierungssperre innerhalb der Wartezeit nicht erfolgreich gesetzt werden, wird nach Ablauf der Wartezeit die Ausnahme CX_SHM_EXCLUSIVE_LOCK_ACTIVE (Ausnahmetext: LOCKED_BY_ACTIVE_CHANGER) ausgelöst.
Da zum Setzen einer Aktualisierungssperre eine aktive Gebietsinstanzversion notwendig ist, wird bei Aufruf der Methode ATTACH_FOR_UPDATE ein automatisch aufgerufener Gebietskonstruktor gestartet. Bei Verwendung des Parameters WAIT_TIME gilt: Kann der Gebietskonstruktor gestartet werden, wird gewartet. Wird der Gebietskonstruktor vor Ablauf der Wartezeit erfolgreich beendet, so wird die Aktualisierungssperre gesetzt. Wird der Gebietskonstruktor beendet, ohne eine aktive Version aufbauen zu können, wird der Wartevorgang vor Ende der Wartezeit abgebrochen. Wird der Gebietskonstruktor nicht innerhalb der Wartezeit beendet, wird die Ausnahme CX_SHM_NO_ACTIVE_VERSION (Ausnahmetext: BUILD_NOT_FINISHED) ausgelöst.
· HANDLE vom Typ REF TO <area>.
Referenz auf das erzeugte Gebietshandle.
· CX_SHM_INCONSISTENT
Der Typ eines in der Gebietsinstanz gespeicherten Objekts stimmt nicht mit der Definition des gleichnamigen Objekts im aktuellen Programm überein.
· CX_SHM_NO_ACTIVE_VERSION
Diese Ausnahme tritt in folgenden Fällen auf:
¡ Die Gebietsinstanzversion ist nicht vorhanden und ein automatischer Aufbau ist nicht möglich, da weder ein Gebietskonstruktor noch eine verdrängte Version vorliegt (Ausnahmetext: NEITHER_BUILD_NOR_LOAD).
¡ Die Gebietsinstanzversion ist nicht vorhanden und der Gebietskonstruktor wurde aufgerufen (Ausnahmetext: BUILD_STARTED).
¡ Die Gebietsinstanzversion ist nicht vorhanden aber der Gebietskonstruktor wird bereits ausgeführt (Ausnahmetext: BUILD_NOT_FINISHED).
¡ Die Gebietsinstanzversion ist nicht vorhanden und das Laden einer verdrängten Version wurde gestartet (Ausnahmetext: LOAD_STARTED).
¡ Die Gebietsinstanzversion ist nicht vorhanden aber das Laden einer verdrängten Version wird bereits ausgeführt (Ausnahmetext: LOAD_NOT_FINISHED).
· CX_SHM_VERSION_LIMIT_EXCEEDED
Die Aktualisierungssperre konnte nicht gesetzt werden, da bereits eine Lesesperre auf der Gebietsinstanzversion besteht und keine neue Version erzeugt werden konnte, da dies die Anzahl der maximal möglichen Versionen überschreiten würde.
· CX_SHM_CHANGE_LOCK_ACTIVE
Eine beliebige Gebietsinstanzversion ist bereits im gleichen internen Modus zum Ändern gesperrt. Wenn bei einem transaktionalen Gebiet eine vorhergehende Änderungssperre aufgehoben wurde, aber noch kein Datenbank-Commit stattfand, wird die Ausnahme mit dem Ausnahmetext WAITING_FOR_DB_COMMIT ausgelöst.
· CX_SHM_EXCLUSIVE_LOCK_ACTIVE
Diese Ausnahme tritt in folgenden Fällen auf:
¡ Die Gebietsinstanz ist in einem anderen internen Modus bereits zum Ändern gesperrt (Ausnahmetext: LOCKED_BY_ACTIVE_CHANGER).
¡ Ein Änderer in einem anderen internen Modus wartet auf eine Änderungssperre (Ausnahmetext: LOCKED_BY_PENDING_CHANGER).
¡ Die Gebietsinstanz ist transaktional und eine Änderungssperre wurde in einem anderen internen Modus freigegeben, aber der Datenbank-Commit ist noch nicht erfolgt (Ausnahmetext: WAITING_FOR_DB_COMMIT).
· CX_SHM_PARAMETER_ERROR
¡ Für den Eingabeparameter ATTACH_MODE wurde ein ungültiger Wert übergeben.
¡ Für den Eingabeparameter WAIT_TIME wurde eine negative Zahl übergeben.
¡ Für den Eingabeparameter CLIENT wurde der Wert von CL_SHM_AREA=>ALL_CLIENTS angegeben.
Die ersten fünf Ausnahmeklassen sind Unterklassen von CX_SHM_ATTACH_ERROR, die selbst von CX_STATIC_CHECK erbt. CX_SHM_PARAMETER_ERROR ist Unterklasse von CX_DYNAMIC_CHECK.
Diese Methode hebt alle Sperren des aktuellen Modus auf den Gebietsinstanzen des zugehörigen Gebiets auf und deaktiviert somit alle Gebietshandles dieses Gebiets im aktuellen internen Modus. Wird dabei eine Schreib- oder Aktualisierungssperre aufgehoben, werden bis dahin gemachte Änderungen an den Gebietsinstanzversionen verworfen.
· CLIENT vom Typ SHM_CLIENT
Optionale Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· 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 im aktuellen Modus keine bestanden.
Diese Methode setzt den Zustand der aktiven Gebietsinstanzversion der Gebietsinstanz des übergebenen Namens bei nicht-transaktionalen Gebieten sofort und bei transaktionalen Gebieten beim nächsten Datenbank-Commit auf veraltet. Danach können keine neuen Sperren auf diese Gebietsinstanzversion mehr gesetzt werden. Bestehende Lesesperren werden nicht aufgehoben. Die Behandlung bestehender Änderungssperren hängt vom Eingabeparameter TERMINATE_CHANGER ab.
· INST_NAME vom Typ SHM_INST_NAME
Name der Gebietsinstanzversion. Die Angabe des Namens ist optional. Der Standardwert ist der Wert der Konstante CL_SHM_AREA=>DEFAULT_INSTANCE.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· TERMINATE_CHANGER vom Typ ABAP_BOOL
Steuert die Behandlung von Änderungssperren. Mögliche Werte sind:
¡ ABAP_TRUE
Bestehende Änderungssperren werden aufgehoben (Standardeinstellung).
¡ ABAP_FALSE
Bestehende Änderungssperren werden nicht aufgehoben.
Nach Ausführung dieser Methode mit Übergabe von ABAP_TRUE an TERMINATE_CHANGER werden alle Programme, in denen noch eine Schreibsperre für die invalidierte Gebietsinstanz existiert, mit dem Laufzeitfehler SYSTEM_SHM_AREA_OBSOLETE abgebrochen.
· RC vom Typ SHM_RC
Mögliche Werte bei nicht-transaktionalen Gebieten:
¡ CL_SHM_AREA=>RC_DONE, wenn die aktive Gebietsinstanzversion auf veraltet gesetzt wurde. Falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, auch wenn eine Änderungssperre aufgehoben wurde.
¡ CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE, wenn keine aktive Gebietsinstanzversion vorhanden ist und, falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, wenn keine Änderungssperre besteht.
¡ CL_SHM_AREA=>RC_INSTANCE_NAME_NOT_FOUND wenn keine Gebietsinstanz des angegebenen Namens existiert.
Bei transaktionalen Gebieten hat RC immer den Wert CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE.
· CX_SHM_PARAMETER_ERROR
Für den Eingabeparameter TERMINATE_CHANGER wurde ein ungültiger Wert übergeben.
Diese Methode setzt den Zustand aller aktiven Gebietsinstanzversionen des Gebiets im aktuellen internen Modus bei nicht-transaktionalen Gebieten sofort und bei transaktionalen Gebieten beim nächsten Datenbank-Commit auf veraltet. Danach können keine neuen Sperren auf diese Gebietsinstanzversionen mehr gesetzt werden. Bestehende Lesesperren werden nicht aufgehoben. Die Behandlung bestehender Änderungssperren hängt vom Eingabeparameter TERMINATE_CHANGER ab.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· TERMINATE_CHANGER vom Typ ABAP_BOOL
Steuert die Behandlung von Änderungssperren. Mögliche Werte sind:
¡ ABAP_TRUE
Bestehende Änderungssperren werden aufgehoben (Standardeinstellung).
¡ ABAP_FALSE
Bestehende Änderungssperren werden nicht aufgehoben.
Nach Ausführung dieser Methode mit Übergabe von ABAP_TRUE an TERMINATE_CHANGER werden alle Programme, in denen noch Schreibsperren für die invalidierten Gebietsinstanzversionen existieren, mit dem Laufzeitfehler SYSTEM_SHM_AREA_OBSOLETE abgebrochen.
· RC vom Typ SHM_RC
Mögliche Werte bei nicht-transaktionalen Gebieten:
¡ CL_SHM_AREA=>RC_DONE, wenn mindestens eine aktive Gebietsinstanzversion auf veraltet gesetzt wurde. Falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, auch wenn mindestens eine Änderungssperre aufgehoben wurde.
¡ CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE, wenn es keine aktive Gebietsinstanzversion gibt und, falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, wenn keine Änderungssperre besteht.
Bei transaktionalen Gebieten hat RC immer den Wert CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE.
· CX_SHM_PARAMETER_ERROR
Für den Eingabeparameter TERMINATE_CHANGER wurde ein ungültiger Wert übergeben.
Diese Methode steht nur zur Verfügung, wenn das Gebiet transaktional ist. Sie wirkt wie die Ausführung der Methode INVALIDATE_INSTANCE mit Übergabe des Werts von ABAP_TRUE an den Eingabeparameter TERMINATE_CHANGER auf allen Applikationsservern des aktuellen SAP-Systems. Diese Propagierung findet beim nächsten Datenbank-Commit statt.
· INST_NAME vom Typ SHM_INST_NAME
Name der Gebietsinstanzversion. Die Angabe des Namens ist optional. Der Standardwert ist der Wert der Konstante CL_SHM_AREA=>DEFAULT_INSTANCE.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· AFFECTING_LOCAL_SERVER vom Typ ABAP_BOOL
Steuert, ob die Änderung des Zustands auch auf dem aktuellen Applikationsserver durchgeführt wird. Mögliche Werte sind:
¡ ABAP_TRUE
Die aktive Gebietsinstanzversion wird auch auf dem aktuellen Applikationsserver auf veraltet gesetzt. Diese Einstellung kann genutzt werden, wenn nach der Änderung von Datenbankinhalten die Inhalte der Gebietsinstanz mit Hilfe des Gebietskonstruktors geändert werden sollen.
¡ ABAP_FALSE
Die aktive Gebietsinstanzversion wird auf dem aktuellen Applikationsserver nicht auf veraltet gesetzt. (Standardeinstellung). Damit kann eine auf einem Applikationsserver neu erstellte Version erhalten bleiben während nur die aktiven Versionen auf anderen Servern invalidiert werden.
· CX_SHM_PARAMETER_ERROR
Für den Eingabeparameter AFFECTING_LOCAL_SERVER wurde ein ungültiger Wert übergeben.
Diese Methode steht nur zur Verfügung, wenn das Gebiet transaktional ist. Sie wirkt wie die Ausführung der Methode INVALIDATE_AREA mit Übergabe des Werts von ABAP_TRUE an den Eingabeparameter TERMINATE_CHANGER auf allen Applikationsservern des aktuellen SAP-Systems. Diese Propagierung findet beim nächsten Datenbank-Commit statt.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· AFFECTING_LOCAL_SERVER vom Typ ABAP_BOOL
Steuert, ob die Änderung des Zustands auch auf dem aktuellen Applikationsserver durchgeführt wird. Mögliche Werte sind:
¡ ABAP_TRUE
Die aktiven Gebietsinstanzversionen werden auch auf dem aktuellen Applikationsserver auf veraltet gesetzt.
¡ ABAP_FALSE
Die aktiven Gebietsinstanzversionen werden auf dem aktuellen Applikationsserver nicht auf veraltet gesetzt. (Standardeinstellung).
· CX_SHM_PARAMETER_ERROR
Für den Eingabeparameter AFFECTING_LOCAL_SERVER wurde ein ungültiger Wert übergeben.
Diese Methode setzt den Zustand aller (d.h. die aktive und die veralteten) Gebietsinstanzversionen der Gebietsinstanz des übergebenen Namens auf verfallen, wobei alle Lesesperren aufgehoben werden. Danach können keine neuen Lesesperren und Aktualisierungssperren auf diese Gebietsinstanzversion mehr gesetzt werden. Die Behandlung bestehender Änderungssperren hängt vom Eingabeparameter TERMINATE_CHANGER ab. Bei nicht-transaktionalen Gebieten erfolgt die Änderung des Zustands der Gebietsinstanzversion sofort und bei transaktionalen Gebieten beim nächsten Datenbank-Commit.
Nach Ausführung dieser Methode werden alle Programme, in denen noch Gebietshandles für die freigegebenen Gebietsinstanzversionen existieren, mit dem Laufzeitfehler SYSTEM_SHM_AREA_OBSOLETE abgebrochen.
· INST_NAME vom Typ SHM_INST_NAME
Name der Gebietsinstanzversion. Die Angabe des Namens ist optional. Der Standardwert ist der Wert der Konstante CL_SHM_AREA=>DEFAULT_INSTANCE.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· TERMINATE_CHANGER vom Typ ABAP_BOOL
Steuert die Behandlung von Änderungssperren. Mögliche Werte sind:
¡ ABAP_TRUE
Bestehende Änderungssperren werden aufgehoben (Standardeinstellung).
¡ ABAP_FALSE
Bestehende Änderungssperren werden nicht aufgehoben.
· RC vom Typ SHM_RC
Mögliche Werte bei nicht-transaktionalen Gebieten:
¡ CL_SHM_AREA=>RC_DONE, wenn eine aktive oder eine veraltete Gebietsinstanzversion auf verfallen gesetzt wurde. Falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, auch wenn eine Änderungssperre aufgehoben wurde.
¡ CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE, wenn es keine aktive oder veraltete Gebietsinstanzversion gibt und, falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, wenn keine Änderungssperre besteht.
¡ CL_SHM_AREA=>RC_INSTANCE_NAME_NOT_FOUND wenn keine Gebietsinstanz des angegebenen Namens existiert.
Bei transaktionalen Gebieten hat RC immer den Wert CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE.
· CX_SHM_PARAMETER_ERROR
Für den Eingabeparameter TERMINATE_CHANGER wurde ein ungültiger Wert übergeben.
Diese Methode setzt den Zustand aller (d.h. die aktive und die veralteten) Gebietsinstanzversionen des Gebiets auf verfallen, wobei alle Lesesperren aufgehoben werden. Danach können keine neuen Sperren auf diese Gebietsinstanzversionen mehr gesetzt werden. Die Behandlung bestehender Änderungssperren hängt vom Eingabeparameter TERMINATE_CHANGER ab. Bei nicht-transaktionalen Gebieten erfolgt die Änderung sofort und bei transaktionalen Gebieten beim nächsten Datenbank-Commit.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· TERMINATE_CHANGER vom Typ ABAP_BOOL
Steuert die Behandlung von Änderungssperren. Mögliche Werte sind:
¡ ABAP_TRUE
Bestehende Änderungssperren werden aufgehoben (Standardeinstellung).
¡ ABAP_FALSE
Bestehende Änderungssperren werden nicht aufgehoben.
· RC vom Typ SHM_RC
Mögliche Werte bei nicht-transaktionalen Gebieten:
¡ CL_SHM_AREA=>RC_DONE, wenn mindestens eine aktive oder veraltete Gebietsinstanzversion auf verfallen gesetzt wurden. Falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, auch wenn mindestens eine Änderungssperre aufgehoben wurden.
¡ CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE, wenn es keine aktiven oder veralteten Gebietsinstanzversionen gibt und, falls an TERMINATE_CHANGER der Wert ABAP_TRUE übergeben wurde, wenn keine Änderungssperre besteht.
Bei transaktionalen Gebieten hat RC immer den Wert CL_SHM_AREA=>RC_NOTHING_TO_BE_DONE.
· CX_SHM_PARAMETER_ERROR
Für den Eingabeparameter TERMINATE_CHANGER wurde ein ungültiger Wert übergeben.
Nach Ausführung dieser Methode werden alle Programme, in denen noch Gebietshandles für die freigegebenen Gebietsinstanzversionen existieren, mit dem Laufzeitfehler SYSTEM_SHM_AREA_OBSOLETE abgebrochen.
Diese Methode liefert die Namen aller im Aufbau befindlichen, aktiven und veralteten Gebietsinstanzen des Gebiets auf dem aktuellen Applikationsserver.
· CLIENT vom Typ SHM_CLIENT
Mandantenkennung falls das Gebiet mandantenabhängig ist. Der Standardwert ist die Kennung des aktuellen Mandanten.
· INFOS vom Typ SHM_INST_INFOS
SHM_INST_INFOS ist eine interne Tabelle vom Zeilentyp SHM_INST_INFO mit folgenden Komponenten:
¡ CLIENT vom Typ MANDT
Mandantenkennung bei mandantenabhängigen Gebieten. Initial bei mandantenunabhängigen Gebieten.
¡ NAME vom Typ SHM_INST_NAME
Gebietsname. Bei Gebieten mit dem Standardnamen ist dies der Inhalt der Konstanten CL_SHM_AREA=>DFAULT_INSTANCE.
¡ VERSIONS_IN_BUILD vom Typ SHM_VERS_CNT
Anzahl der Gebietsinstanzversionen, die sich gerade im Aufbau befinden. Mögliche Werte sind 0 oder 1.
¡ VERSIONS_ACTIVE vom Typ SHM_VERS_CNT
Anzahl der gerade aktiven Gebietsinstanzversionen. Mögliche Werte sind 0 oder 1.
¡ VERSIONS_OBSOLETE vom Typ SHM_VERS_CNT
Anzahl der veralteten Gebietsinstanzversionen. Mögliche Werte sind 0 bis maximale Anzahl von Gebietsinstanzversionen (Komponente MAX_VERSIONS des Attributs PROPERTIES der Klasse CL_SHM_AREA).
Wenn es keine Gebietsinstanzen zu dem Gebiet gibt, wird eine leere Tabelle zurückgegeben. Die Anzahl verfallener Gebietsinstanzversionen wird nicht berücksichtigt.
Diese Methode ruft explizit den Gebietskonstruktor auf. Die Ausführung des Gebietskonstruktors erfolgt im aktuellen internen Modus. Bei mandantenabhängigen Gebieten wird das Gebiet des aktuellen Mandanten aufgebaut.
· INST_NAME vom Typ SHM_INST_NAME
Name der Gebietsinstanzversion. Die Angabe des Namens ist optional. Der Standardwert ist der Wert der Konstante CL_SHM_AREA=>DEFAULT_INSTANCE.
· CX_SHM_BUILD_FAILED
Während der Ausführung des Gebietskonstruktors ist ein Fehler aufgetreten.
· CX_SHMA_NOT_CONFIGURED
An die Gebietsklasse ist keine Gebietskonstruktorklasse angebunden.
· CX_SHMA_INCONSISTENT
Die Gebietsklasse muss neu generiert werden.
Diese Methode legt das Wurzelobjekt (Instanz der Gebietswurzelklasse) der Gebietsinstanzversion fest. Bevor eine Änderungssperre mit der Methode DETACH_COMMIT aufgehoben werden kann, muss das Wurzelobjekt mindestens einmal mit SET_ROOT gesetzt werden. Umsetzungen sind möglich. Die Methode SET_ROOT kann nur in Gebietshandles mit Änderungssperren aufgerufen werden.
· ROOT vom Typ REF TO <area_root_class>, wobei <area_root_class> die Gebietswurzelklasse des Gebiets ist.
· CX_SHM_WRONG_HANDLE
Die Methode wurde über ein Gebietshandle mit Lesesperre oder ein Gebietshandle, in dem die Methode DETACH_COMMIT fehlgeschlagen ist, aufgerufen.
· CX_SHM_INITIAL_REFERENCE
Die an ROOT übergebene Referenzvariable ist initial.
Beide Ausnahmen sind Unterklassen von CX_DYNAMIC_CHECK.