* ________ _______ _____ ___ ________ ______ _______ ________ * /" )/" "|(\" \|" \ /" ) / " \ /" \ /" ) * (: \___/(: ______)|.\\ \ |(: \___/ // ____ \ |: |(: \___/ * \___ \ \/ | |: \. \\ | \___ \ / / ) :)|_____/ ) \___ \ * __/ \\ // ___)_ |. \ \. | __/ \\(: (____/ // // / __/ \\ * /" \ :)(: "|| \ \ | /" \ :)\ / |: __ \ /" \ :) * (_______/ \_______) \___|\____\)(_______/ \"_____/ |__| \___)(_______/ * The always up-to-date overview for system-wide health monitoring * Report : zsensor_fxr_saver_bal. * Title : Automatically perform Business Application Log cleanup (FIXER) * Description : "! This report runs checks the state and settings on the SAVER_BAL "! sensor and follows up on it - by executing standard SAP cleanup "! report calls. REPORT zsensor_fxr_saver_idoc. CLASS lcl_controller DEFINITION. PUBLIC SECTION. TYPES: BEGIN OF lty_settings, object TYPE c LENGTH 20, days TYPE int4, "Number of days retention period autofix TYPE c LENGTH 10, END OF lty_settings. CLASS-DATA go_log TYPE REF TO zcl_log. CLASS-DATA gt_settings TYPE SORTED TABLE OF lty_settings WITH UNIQUE KEY object. CLASS-DATA gr_daterange TYPE RANGE OF d. CLASS-DATA gr_object TYPE RANGE OF balhdr-object. CLASS-METHODS get_settings IMPORTING iv_sensortype TYPE zsensors-sensor. CLASS-METHODS set_daterange IMPORTING iv_period TYPE int4. ENDCLASS. CLASS lcl_controller IMPLEMENTATION. METHOD get_settings. DATA lv_label TYPE string. DATA lv_value TYPE string. * Get the test settings for the sensor - focus on the AUTOFIX parameter and gather details. LOOP AT zcl_sensor_manager=>get_longtext( iv_sensortype = iv_sensortype ) INTO DATA(ls_textline). IF ls_textline-tdformat = '/:'. SPLIT ls_textline-tdline AT ':' INTO lv_label lv_value. READ TABLE gt_settings ASSIGNING FIELD-SYMBOL() WITH KEY object = ls_textline-tdline. IF sy-subrc <> 0. INSERT VALUE #( object = ls_textline-tdline ) INTO TABLE gt_settings ASSIGNING . ENDIF. ELSE. SPLIT ls_textline-tdline AT ':' INTO lv_label lv_value. CASE lv_label. WHEN 'DAYS'. MOVE lv_value TO -days. WHEN 'AUTOFIX'. MOVE lv_value TO -autofix. ENDCASE. ENDIF. ENDLOOP. ENDMETHOD. METHOD set_daterange. DATA lv_date TYPE sy-datum. lv_date = sy-datum - iv_period. gr_daterange = VALUE #( ( sign = 'I' option = 'LE' low = lv_date ) ). ENDMETHOD. ENDCLASS. TABLES: BALHDR. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(30) lbl_p01 FOR FIELD pa_senso. PARAMETERS pa_senso TYPE zsensors-sensor DEFAULT 'SAVER_BAL'. PARAMETERS pa_sentx TYPE char60. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS pa_test AS CHECKBOX DEFAULT abap_true. SELECTION-SCREEN COMMENT 10(30) lbl_p02 FOR FIELD pa_test. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 4. PARAMETERS pa_viase AS CHECKBOX DEFAULT abap_true. SELECTION-SCREEN COMMENT 10(30) lbl_p03 FOR FIELD pa_viase. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE lbl_b01. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(22) lbl_s00 FOR FIELD so_sub. SELECT-OPTIONS so_sub FOR BALHDR-subobject. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(22) lbl_s01 FOR FIELD so_ext. SELECT-OPTIONS so_ext FOR BALHDR-extnumber. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(22) lbl_s02 FOR FIELD so_trc. SELECT-OPTIONS so_trc FOR BALHDR-ALTCODE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(22) lbl_s03 FOR FIELD so_prg. SELECT-OPTIONS so_prg FOR BALHDR-ALPROG. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(22) lbl_s04 FOR FIELD so_usr. SELECT-OPTIONS so_usr FOR BALHDR-ALUSER. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(22) lbl_s05 FOR FIELD so_pcl. SELECT-OPTIONS so_pcl FOR BALHDR-PROBCLASS. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b01. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(60) lbl_hint. SELECTION-SCREEN END OF LINE. AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-name = 'PA_SENSO'. screen-input = '0'. MODIFY SCREEN. ENDIF. IF screen-name = 'PA_SENTX'. screen-input = '0'. screen-display_3d = '0'. MODIFY SCREEN. ENDIF. ENDLOOP. INITIALIZATION. DATA(lo_i18n) = zcl_i18n=>get_instance( 'sensor.saver_bal.fx' ). lo_i18n->feed( VALUE #( ( id = 'P01' nl = |Sensor type| en = |Sensor type| ) ( id = 'P02' nl = |Test (geen verwerking)| en = |Test (no updates)| ) ( id = 'P03' nl = |Toon selectie scherm| en = |Show selection screen| ) ( id = 'B01' nl = |Extra selectie instellingen| en = |Extra selection settings| ) ( id = 'S00' nl = |Subobject| en = |Subobject| ) ( id = 'S01' nl = |Externe ID| en = |External ID| ) ( id = 'S02' nl = |Transactiecode| en = |Transaction code| ) ( id = 'S03' nl = |Programma| en = |Program| ) ( id = 'S04' nl = |Gebruiker| en = |User| ) ( id = 'S05' nl = |Probleemklasse| en = |Problem class| ) ( id = 'HINT' nl = |Rapportage SBAL_DELETE zal worden aangeroepen| en = |Report SBAL_DELETE will be called| ) ( id = 'MSG1' nl = |BAL verslagen voor object & met retentie periode & dagen wordt verwerkt| en = |BAL log object & with retention period & days is processed| ) ( id = 'MSG2' nl = |Rapportage & is aangeroepen| en = |Report & is called| ) ( id = 'MSG3' nl = |Afgerond| en = |Finished| ) ( id = 'ALREADYACTIVE' nl = |Programma is al actief| en = |Report is already running| ) ( id = 'NODATA' nl = |Geen autofix verzoeken gevonden (niks te doen)| en = |No autofix suggestions available (nothing to do)| ) ) ). lbl_p01 = lo_i18n->get( 'P01' ). lbl_p02 = lo_i18n->get( 'P02' ). lbl_p03 = lo_i18n->get( 'P03' ). lbl_b01 = lo_i18n->get( 'B01' ). lbl_s00 = lo_i18n->get( 'S00' ). lbl_s01 = lo_i18n->get( 'S01' ). lbl_s02 = lo_i18n->get( 'S02' ). lbl_s03 = lo_i18n->get( 'S03' ). lbl_s04 = lo_i18n->get( 'S04' ). lbl_s05 = lo_i18n->get( 'S05' ). lbl_hint = lo_i18n->get( 'HINT' ). pa_sentx = zcl_sensor_manager=>gt_sensortype_detail[ sensor = pa_senso ]-summary. START-OF-SELECTION. lcl_controller=>go_log = zcl_log=>get_instance( iv_object = 'ALERT' iv_subobject = 'PROCESSING' iv_extnumber = 'SAVER_BAL' ). IF pa_test = abap_true. lcl_controller=>go_log->add_text( lo_i18n->get( 'P02' ) ). ELSE. "Lock the run (report + variant). CALL FUNCTION 'ENQUEUE_ESVARIANT' EXPORTING relid = 'XX' report = sy-repid variant = sy-slset srtf2 = '' EXCEPTIONS OTHERS = 4. IF sy-subrc = 4. MESSAGE lo_i18n->get( 'ALREADYACTIVE' ) TYPE 'S'. EXIT. ENDIF. "Open the measurements on relevant tables DATA(lo_measurements) = NEW zcl_sensors_grip_on_space( ). lo_measurements->table_measurement_start( value #( ( 'BALHDR' ) ( 'BALDAT' ) ) ). ENDIF. lcl_controller=>get_settings( pa_senso ). LOOP AT lcl_controller=>gt_settings INTO DATA(ls_settings) WHERE autofix = zcl_sensors_grip_on_space=>co_certified. lcl_controller=>go_log->add_text( lo_i18n->get( iv_id = 'MSG1' iv_par = ls_settings-object iv_par2 = |{ ls_settings-days }| ) ). IF pa_test = abap_false. lcl_controller=>set_daterange( ls_settings-days ). lcl_controller=>gr_object = VALUE #( ( sign = 'I' option = 'EQ' low = ls_settings-object ) ). lcl_controller=>go_log->add_text( lo_i18n->get( iv_id = 'MSG2' iv_par = 'RSETESTD' ) ). data(lv_enddate) = lcl_controller=>gr_daterange[ 1 ]-low. IF pa_viase = space. SUBMIT SBAL_DELETE WITH p_bef_no = abap_false WITH p_bef_ok = abap_true WITH p_bef_fl = abap_false WITH S_OBJ in lcl_controller=>gr_object WITH S_SUB in SO_SUB WITH S_EXT in SO_EXT WITH S_TRC in SO_TRC WITH S_PRG in SO_PRG WITH S_USR in SO_USR WITH S_PCL in SO_PCL WITH P_BEGDAT = '19710101' WITH P_ENDDAT = lv_enddate WITH p_sim = abap_false WITH p_list = abap_false WITH p_direct = abap_true WITH p_bck = abap_false AND RETURN. ELSE. SUBMIT SBAL_DELETE WITH p_bef_no = abap_false WITH p_bef_ok = abap_true WITH p_bef_fl = abap_false WITH S_OBJ in lcl_controller=>gr_object WITH S_SUB in SO_SUB WITH S_EXT in SO_EXT WITH S_TRC in SO_TRC WITH S_PRG in SO_PRG WITH S_USR in SO_USR WITH S_PCL in SO_PCL WITH P_BEGDAT = '19710101' WITH P_ENDDAT = lv_enddate WITH p_sim = abap_false WITH p_list = abap_false WITH p_direct = abap_true WITH p_bck = abap_false VIA SELECTION-SCREEN AND RETURN. ENDIF. lcl_controller=>go_log->add_text( lo_i18n->get( 'MSG3' ) ). ENDIF. ENDLOOP. IF sy-subrc <> 0. lcl_controller=>go_log->add_text( lo_i18n->get( 'NODATA' ) ). ELSEIF pa_test = abap_false. lo_measurements->table_measurement_finish( ). ENDIF. CALL FUNCTION 'DEQUEUE_ESVARIANT'. lcl_controller=>go_log->display( ).