ABAP FM Logger History Log Cleaner

 

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'.

 

posted @ 2024-03-26 16:22  ABAP-武汉  阅读(50)  评论(0)    收藏  举报