
Main Class Code
CLASS zcl_spfli_buffer DEFINITION
PUBLIC
CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
get_instance
RETURNING
VALUE(ro_instance) TYPE REF TO zcl_spfli_buffer.
METHODS:
get_spfli_data
IMPORTING
iv_connid TYPE s_conn_id
RETURNING
VALUE(rt_spfli) TYPE TABLE OF spfli.
PRIVATE SECTION.
CLASS-DATA: gt_spfli_buffer TYPE TABLE OF spfli WITH EMPTY KEY,
go_instance TYPE REF TO zcl_spfli_buffer.
METHODS:
load_buffer.
ENDCLASS.
CLASS zcl_spfli_buffer IMPLEMENTATION.
METHOD get_instance.
" Create the singleton instance if it doesn't already exist
IF go_instance IS NOT BOUND.
CREATE OBJECT go_instance.
ENDIF.
ro_instance = go_instance.
ENDMETHOD.
METHOD get_spfli_data.
" Load buffer if empty
IF gt_spfli_buffer IS INITIAL.
load_buffer( ).
ENDIF.
" Use FILTER operator for better performance to read from the buffer
rt_spfli = FILTER #( gt_spfli_buffer USING KEY primary_key
WHERE connid = iv_connid ).
ENDMETHOD.
METHOD load_buffer.
" Load data from database to buffer
SELECT * FROM spfli INTO TABLE gt_spfli_buffer.
ENDMETHOD.
ENDCLASS.
And in User-Exit, BADI
DATA: lo_spfli_buffer TYPE REF TO zcl_spfli_buffer,
lt_spfli TYPE TABLE OF spfli.
" Get the singleton instance of the zcl_spfli_buffer class
lo_spfli_buffer = zcl_spfli_buffer=>get_instance( ).
" Call the get_spfli_data method
lt_spfli = lo_spfli_buffer->get_spfli_data(
iv_connid = 'Your_Connection_ID' ).
" You can now process lt_spfli as needed within your exit
LOOP AT lt_spfli INTO DATA(ls_spfli).
" Implement your logic with ls_spfli
ENDLOOP.