To implement shared memory for caching data using a class in ABAP, you’ll need to follow these steps. This involves defining a shared memory area and an area class, which will manage the data within this shared space. Here’s a step-by-step guide:

  1. Inheriting cl_shm_area: This allows the class to interact with shared memory areas and provides methods like attach_for_read.
  2. Interface if_shm_build_instance: Correctly implemented to initialize (build) the shared memory area with data.
  3. get_instance Method: Attaches to the shared memory and returns an instance. Exception handling for shared memory issues is appropriately included.
  4. get_spfli_data Method: Implements filtering of data based on connid directly on the shared memory content, which is efficient.

Steps to Create a Shared Memory Object

  1. Access Transaction SHMA:
    • Open the Shared Memory Administration transaction by entering SHMA in the SAP GUI.
  2. Create a New Area:
    • Click on “New Entries” to define a new shared memory area.
  3. Define Area Attributes:
    • Area Name: Enter a unique name for your shared memory area.
    • Description: Provide a brief description of its purpose.
    • Area Class: Specify the area class you have created that implements the logic for managing the shared memory data. This is typically the class like zcl_spfli_shared_memory in your case.
    • Initial Area Size: Define the size of memory you want to allocate initially.
    • Expiry Time: If necessary, set parameters for when the shared memory data should expire or be refreshed.
  4. Save the Configuration:
    • After filling out the necessary fields, save the configuration.
  5. Activate the Area:
    • Once the area is defined, you need to activate it, which makes the shared memory object available for use in your application.

By doing this, the shared memory object is properly set up in the SAP system. It allows your application to efficiently access and manage data centrally in shared memory, reducing the need for repeated database queries and ensuring data consistency across multiple sessions.

CLASS zcl_spfli_shared_memory DEFINITION
  INHERITING FROM cl_shm_area
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_shm_build_instance.

    " Class-method to get instance of the shared memory area
    CLASS-METHODS get_instance
      RETURNING
        VALUE(ro_instance) TYPE REF TO zcl_spfli_shared_memory.

    " Method to retrieve SPFPL data filtered by connection ID
    METHODS get_spfli_data
      IMPORTING
        iv_connid TYPE s_conn_id
      RETURNING
        VALUE(rt_data) TYPE TABLE OF spfli.

  PRIVATE SECTION.
    DATA mt_spfli_data TYPE TABLE OF spfli.
ENDCLASS.

CLASS zcl_spfli_shared_memory IMPLEMENTATION.

  METHOD if_shm_build_instance~build.
    " Load data from database into shared memory object
    SELECT * FROM spfli INTO TABLE mt_spfli_data.
  ENDMETHOD.

  METHOD get_instance.
    DATA lo_area TYPE REF TO zcl_spfli_shared_memory.

    TRY.
        " Try attaching for reading; if outdated or missing, rebuild
        lo_area = zcl_spfli_shared_memory=>attach_for_read( ).
    CATCH cx_shm_outdated
          cx_shm_missing
          cx_shm_parent_mismatch.
        " Attach for update and build shared memory
        lo_area = zcl_spfli_shared_memory=>attach_for_update( ).

        " Call build method to populate shared memory
        lo_area->if_shm_build_instance~build( ).
    ENDTRY.

    ro_instance = lo_area.
  ENDMETHOD.

  METHOD get_spfli_data.
    " Filter the buffered data based on connection ID (iv_connid)
    rt_data = FILTER #( mt_spfli_data USING KEY primary_key WHERE connid = iv_connid ).
  ENDMETHOD.

ENDCLASS.

Usage

To use this setup in your application, you would typically call the get_instance method to ensure that the shared memory is attached and available, then use get_spfli_data to retrieve and use the data as needed.

This structure provides a clear, efficient way to handle database results within shared memory, reducing the load on the database and ensuring data consistency.