Skip to content

ABAP Keyword Documentation →  ABAP − Reference →  Creating Objects and Values →  Shared Objects →  Shared Objects - Classes and Interfaces →  Shared Objects - IF_SHM_BUILD_INSTANCE 

Shared Objects - Area Constructor Class

An area constructor class is a global class with a freely definable name that implements the interface IF_SHM_BUILD_INSTANCE. An area constructor can be implemented in the interface method BUILD.

An area constructor class can be assigned to an area in transaction SHMA. This is always necessary if the area is built automatically by calling the area constructor, that is if the components BUILD_KIND and REFRESH_TIME of the structure PROPERTIES of the class CL_SHM_AREA are filled accordingly. If an area is not built automatically, an area constructor class can be specified for the explicit area constructor call using the method BUILD of the area class.

Other versions: 7.31 | 7.40 | 7.54

Structure of an Area Constructor

The following structure is recommended for the area constructor implemented in the interface method BUILD:

  • First, the area constructor has to use the method ATTACH_FOR_WRITE to create an area handle with an exclusive lock for the area instance passed in the parameter INST_NAME. The automatic area constructor is also not able to ensure that the exclusive lock can be set, which means that all exceptions have to be caught and forwarded to the caller of the constructor by raising the interface exception CX_SHM_BUILD_FAILED. This should pass the original exception to the parameter PREVIOUS of the constructor of CX_SHM_BUILD_FAILED.
  • As is the case whenever a new area instance version is created, a root object also has to be defined in the area constructor using the method SET_ROOT.
  • The area instance version can then be built, which means that objects are stored in the shared memory.
  • The new area handle has to be released again using the method DETACH_COMMIT. If an exception is raised, it is usually caused by a programming error and should not be handled in the area constructor.
  • If the area constructor was called automatically, a database commit has to be triggered when a transactional area is built.
  • In an area constructor, no statements can be used that exit the current internal session (such as SUBMIT, CALL TRANSACTION, CALL SCREEN, MESSAGE for message types "W", "I", "E", and so on).


    Example

    The following implementation can be used as a template for new implementations.

    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.