Ansicht
Dokumentation

ABENSHM_AREA_CONSTRUCTOR_CLASS - SHM AREA CONSTRUCTOR CLASS

ABENSHM_AREA_CONSTRUCTOR_CLASS - SHM AREA CONSTRUCTOR CLASS

ROGBILLS - Synchronize billing plans   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Gebietskonstruktorklasse

Eine Gebietskonstruktorklasse ist eine globale Klasse mit frei wählbarem Namen, die das Interface IF_SHM_BUILD_INSTANCE implementiert. In der Interfacemethode BUILD kann ein Gebietskonstruktor für ein Gebiet implementiert werden.

In der Transaktion SHMA kann einem Gebiet eine Gebietskonstruktorklasse zugeordnet werden. Dies ist immer dann notwendig, wenn das Gebiet durch Aufruf des Gebietskonstruktors automatisch aufgebaut werden soll, d.h. wenn die Komponenten BUILD_KIND und REFESH_TIME der Struktur PROPERTIES der Klasse CL_SHM_AREA entsprechend gefüllt sind. Falls kein automatischer Aufbau eines Gebiets erfolgen soll, kann eine Gebietskonstruktorklasse für den expliziten Aufruf des Gebietskonstruktors mit der Methode BUILD der Gebietsklasse angegeben werden.

Aufbau eines Gebietskonstruktors

Für den in der Interfacemethode BUILD implementierten Gebietskonstruktor wird folgender Aufbau empfohlen:

  1. Der Gebietskonstruktor muss zuerst mit der Methode ATTACH_FOR_WRITE ein Gebietshandle mit Schreibsperre für die im Parameter INST_NAME übergebene Gebietsinstanz erzeugen. Da auch bei einem automatisch aufgerufenen Gebietskonstruktor nicht sicher gestellt werden kann, dass das Setzen der Schreibsperre möglich ist müssen alle Ausnahmen abgefangen und durch Auslösen der Interface-Ausnahme CX_SHM_BUILD_FAILED an den Aufrufer des Konstruktors weitergeleitet werden. Dabei sollte die ursprüngliche Ausnahme an den Parameter PREVIOUS des Konstruktors von CX_SHM_BUILD_FAILED übergeben werden.
  2. Wie bei jedem Erzeugen einer neuen Gebietsinstanzversion muss auch im Gebietskonstruktor mit der Methode SET_ROOT ein Wurzelobjekt festgelegt werden.
  3. Danach kann die Gebietsinstanzversion aufgebaut, d.h. Objekte im Shared Memory abgelegt werden.
  4. Das erzeugte Gebietshandle muss mit der Methode DETACH_COMMIT wieder freigegeben werden. Wenn es dabei zu einer Ausnahme kommt, handelt es in der Regel um einen Programmierfehler und die Ausnahme sollte nicht im Gebietskonstruktor behandelt werden.
  5. Wenn der Gebietskonstruktor automatisch aufgerufen wurde, muss beim Aufbau eines transaktionalen Gebiets ein Datenbank-Commit ausgelöst werden.

In einem Gebietskonstruktor dürfen keine Anweisungen verwendet werden, die den aktuellen internen Modus verlassen (z.B. SUBMIT, CALL TRANSACTION, CALL SCREEN, MESSAGE für Nachrichtentypen W, P, E usw.).

Beispiel

Die folgende Implementierung kann als Vorlage für eigene Implementierungen dienen.

CLASS area_constructor IMPLEMENTATION.
  METHOD if_shm_build_instance~build.
    DATA:
      my_handle TYPE REF TO area,
      my_data   TYPE REF TO area_root_class,
      my_except TYPE REF TO cx_root.
    TRY.
        my_handle = cl_my_area=>attach_for_write( inst_name ).
      CATCH cx_shm_error INTO my_except.
        RAISE EXCEPTION TYPE cx_shm_build_failed
                        EXPORTING previous = my_except.
    ENDTRY.
    CREATE OBJECT my_data AREA HANDLE my_handle.
    my_handle->set_root( my_data ).
    ... " code to build the area instance
    my_handle->detach_commit( ).
    IF invocation_mode = cl_shm_area=>invocation_mode_auto_build.
      COMMIT CONNECTION default.
    ENDIF.
  ENDMETHOD.
ENDCLASS.






BAL Application Log Documentation   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4899 Date: 20240523 Time: 115908     sap01-206 ( 62 ms )