![]()
REPORT ZP0PM_A_IF0018A.
DATA: gs_log TYPE zp0pmadg0018a.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-t00.
SELECT-OPTIONS: s_fm FOR gs_log-fname NO INTERVALS.
PARAMETERS: p_check TYPE xfeld.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT 1(45) TEXT-t01.
SELECTION-SCREEN END OF BLOCK b2.
START-OF-SELECTION.
"FM Logger History Log Cleaner
SELECT fname, retention_days, special_status
FROM zp0pmadg0018b
WHERE fname IN @s_fm
AND enabled = 'X'
INTO TABLE @DATA(gt_configs).
DATA: g_count TYPE int4.
DATA: g_ts_cond TYPE timestamp.
DATA: r_s_status TYPE RANGE OF zp0pmadg0018a-status.
"FM Logger History Log Cleaner
GET TIME STAMP FIELD DATA(ts).
"FM Logger History Log Cleaner
LOOP AT gt_configs ASSIGNING FIELD-SYMBOL(<fs_config>).
g_ts_cond = cl_abap_tstmp=>subtractsecs( tstmp = ts secs = <fs_config>-retention_days * 86400 ).
IF <fs_config>-special_status IS NOT INITIAL.
r_s_status = VALUE #( ( sign = 'I' option = 'EQ' low = <fs_config>-special_status ) ).
ENDIF.
SELECT count(*) FROM zp0pmadg0018a
WHERE fname = @<fs_config>-fname
AND status IN @r_s_status
AND timestamp < @g_ts_cond
INTO @DATA(g_count_temp).
"FM Logger History Log Cleaner
g_count = g_count + g_count_temp.
"FM Logger History Log Cleaner
IF p_check = abap_false.
DELETE FROM zp0pmadg0018a WHERE fname = @<fs_config>-fname
AND status IN @r_s_status
AND timestamp < @g_ts_cond.
COMMIT WORK.
ENDIF.
ENDLOOP.
"FM Logger History Log Cleaner
DATA(g_msg) = COND #( WHEN p_check = abap_true THEN |{ g_count } records found|
ELSE |{ g_count } records deleted|
).
"FM Logger History Log Cleaner
MESSAGE g_msg TYPE 'S'.