Moin,
habe für so was eine Puffertabelle 'ZNEWINDX' und ein paar eigene Objekte, aber es ist kein Wunderwerk wenn man es nachbauen mag. Man muss auch keine Objekte haben, es geht auch ohne OO.
Bei SEL_START muss man die eigenen Selektionsvariablen bedienen. Das ganze kann hier nur als Beispiel dienen!
Und SAVE_LAST_SELECTION macht das was der Name verspricht. Zumindest dann, wenn man keine Variante benutzt hat!
Hoffe es hilft weiter.
HK
Lesen und Schreiben der Selektion ( unter USERNAME und REPID!)
*&---------------------------------------------------------------------*
*& Form SEL_START
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sel_start .
FIELD-SYMBOLS : TYPE rsparams.
IF o_new_persistent IS INITIAL.
o_new_persistent = zcl_new_persistent=>create( ).
ENDIF.
DEFINE fill_seltab.
&1-SIGN = -SIGN.
&1-option = -option.
&1-low = -low.
&1-high = -high.
APPEND &1 TO &1.
END-OF-DEFINITION.
*----- Nutzerspezifische Werte
CONCATENATE sy-repid sy-uname INTO puffer_id.
*----- nicht aus dem memory holen!
DELETE FROM SHARED BUFFER znewindx(hk) ID puffer_id.
CALL METHOD o_new_persistent->read_object
EXPORTING
e_srtfd = puffer_id
IMPORTING
i_object = ta_select
i_error = error.
IF NOT o_new_persistent IS INITIAL.
CLEAR o_new_persistent.
ENDIF.
CHECK NOT ta_select[] IS INITIAL.
LOOP AT ta_select ASSIGNING .
CASE -selname.
*----- Tabellen
*----- Zeitraum abgrenzen
WHEN 'SO_GSTRP'.
fill_seltab so_gstrp.
*----- Werk
WHEN 'SO_WERKS'.
fill_seltab so_werks.
*----- Arbeitsplatz
WHEN 'SO_ARBPL'.
fill_seltab so_arbpl.
**----- Memory-Optimierte Liste
* WHEN 'P_KURZ'.
* IF g_dau_user = abap_false.
* p_kurz = -low.
* ELSE.
* p_kurz = abap_true.
* ENDIF.
*----- Parameter Steuerung
WHEN 'P_PLUSM'.
p_plusm = -low.
WHEN 'P_MINUS'.
p_minus = -low.
WHEN 'P_FORM'.
p_form = -low.
WHEN 'P_CLOCK'.
p_clock = -low.
WHEN 'P_PRODI'.
p_prodi = -low.
*----- GLEICHTEILE
WHEN 'P_1001'.
p_1001 = -low.
WHEN 'P_1002'.
p_1002 = -low.
WHEN 'P_1003'.
p_1003 = -low.
WHEN 'P_2001'.
p_2001 = -low.
WHEN 'P_2002'.
p_2002 = -low.
WHEN 'P_2003'.
p_2003 = -low.
WHEN 'P_3001'.
p_3001 = -low.
WHEN 'P_3002'.
p_3002 = -low.
WHEN 'P_3003'.
p_3003 = -low.
WHEN 'P_4001'.
p_4001 = -low.
WHEN 'P_4002'.
p_4002 = -low.
WHEN 'P_4003'.
p_4003 = -low.
* p_5001 existiert nicht
WHEN 'P_5002'.
p_5002 = -low.
WHEN 'P_5003'.
p_5003 = -low.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM save_last_selection.
DATA : l_wa TYPE znewindx.
CHECK sy-slset IS INITIAL. " Nur wenn keine Variante genutzt wurde
CLEAR l_wa.
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
curr_report = sy-repid
* IMPORTING
* SP =
TABLES
selection_table = ta_select
EXCEPTIONS
not_found = 1
no_report = 2
OTHERS = 3.
IF sy-subrc <> 0.
RETURN.
ENDIF.
*----- Immer auf die Platte
CONCATENATE sy-repid sy-uname INTO puffer_id.
CALL FUNCTION 'ENQUEUE_EZNEWINDX'
EXPORTING
mode_znewindx = 'E'
mandt = sy-mandt
relid = 'hk'
srtfd = puffer_id
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc = 0.
DELETE FROM DATABASE znewindx(hk) ID puffer_id.
COMMIT WORK AND WAIT.
l_wa-aedat = sy-datum.
l_wa-usera = sy-uname.
l_wa-pgmid = sy-repid.
EXPORT l_wa FROM ta_select TO DATABASE znewindx(hk)
ID puffer_id
FROM l_wa
COMPRESSION ON.
COMMIT WORK AND WAIT.
CALL FUNCTION 'DEQUEUE_EZNEWINDX'
EXPORTING
mode_znewindx = 'E'
mandt = sy-mandt
relid = 'hk'
srtfd = puffer_id.
ENDIF.
ENDFORM.