* ________ _______ _____ ___ ________ ______ _______ ________ * /" )/" "|(\" \|" \ /" ) / " \ /" \ /" ) * (: \___/(: ______)|.\\ \ |(: \___/ // ____ \ |: |(: \___/ * \___ \ \/ | |: \. \\ | \___ \ / / ) :)|_____/ ) \___ \ * __/ \\ // ___)_ |. \ \. | __/ \\(: (____/ // // / __/ \\ * /" \ :)(: "|| \ \ | /" \ :)\ / |: __ \ /" \ :) * (_______/ \_______) \___|\____\)(_______/ \"_____/ |__| \___)(_______/ * The always up-to-date overview for system-wide health monitoring * Report : zsensor_fxr_saver_CD. * Title : Automatically perform Change Document cleanup (FIXER) * Description : "! This report runs checks the state and settings on the SAVER_CD "! sensor and follows up on it - by executing standard SAP cleanup "! report calls. REPORT zsensor_fxr_saver_cd. 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_objectclas TYPE RANGE OF cdhdr-objectclas. CLASS-METHODS get_settings IMPORTING iv_sensortype TYPE zsensors-sensor. 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. ENDCLASS. TABLES cdhdr. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(30) lbl_p01 FOR FIELD pa_senso. PARAMETERS pa_senso TYPE zsensors-sensor DEFAULT 'SAVER_CD'. 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_s01 FOR FIELD so_tcode. SELECT-OPTIONS so_tcode FOR cdhdr-tcode. 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_CD.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 = 'S01' nl = |Transactiecode| en = |Transaction code| ) ( id = 'HINT' nl = |Rapportage RSCDOK99 zal worden aangeroepen| en = |Report RSCDOK99 will be called| ) ( id = 'MSG1' nl = |Change documenten & met periode & dagen wordt verwerkt| en = |Change documents & met 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_s01 = lo_i18n->get( 'S01' ). 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_CD' ). 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 #( ( 'CDHDR' ) ( 'CDPOS' ) ) ). 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. data(lv_enddate) = sy-datum - ls_settings-days. lcl_controller=>gr_objectclas = VALUE #( ( sign = 'I' option = 'EQ' low = ls_settings-object ) ). lcl_controller=>go_log->add_text( lo_i18n->get( iv_id = 'MSG2' iv_par = 'RSCDOK99' ) ). IF pa_viase = space. SUBMIT RSCDOK99 with object in lcl_controller=>gr_objectclas with to_date = lv_enddate with testrun = abap_false with p_alv = abap_false AND RETURN. ELSE. SUBMIT RSCDOK99 with object in lcl_controller=>gr_objectclas with to_date = lv_enddate with testrun = abap_false with p_alv = 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( ).