* _______ _______ _______ _______ _______ _______ ______ _______ _______ ______ _______ * | _ | _ | _ | | | _ | || _ | _ | _ | | _ | * | |_| | |_| | |_| | _ | | |_| | _ | |_| | |_| | | || | |_| | * | | | | |_| | | | | | | | | |_||_| | * | | _ || | ___| _| | |_| | | _ || __ | | * | _ | |_| | _ | | | |_| _ | | _ | |_| | | | | _ | * |__| |__|_______|__| |__|___| |_______|__| |__|______||__| |__|_______|___| |_|__| |__| * www.abapcadabra.com * *------------------------------------------------------------------------------------------- * program : ZABAPCADABRA_AP_LOGGER * title : Example local class that takes care of error logging * functional area : Cross modules * environment : 4.7 * program Function : This repor demonstrates the use of the local lcl_logging * class that can be used to compose a log for e.g. your * interface. * It can log errors and it also logs the settings from the * selection screen. * Documentation : Search for "Reporting information" on AbapcadabrA.com * Previous version : This is the initial version * Developer name : Wim Maasdam * Development date : 19/08/2015 * Version : 0.1 *--------------------------------------------------------------------- * Change list: * Date Description * 19/08/2015 Initial release *--------------------------------------------------------------------- REPORT ZABAPCADABRA_AP_LOGGER. *---------------------------------------------------------------------- * CLASS lcl_logging - the message logging and error logging for this * interface is done in the Business Application Log (trx. SLG0, SLG1). * The log is displayed at the end of the report run. Logs can also * be saved (options on the selection screen are available). *---------------------------------------------------------------------- CLASS lcl_logging DEFINITION. PUBLIC SECTION. CLASS-DATA: go_log TYPE REF TO cl_ishmed_bal, gv_errors_were_logged TYPE boolean VALUE space. CLASS-METHODS: initialize IMPORTING object TYPE balobj_d DEFAULT 'ALERT' subobject TYPE balsubobj DEFAULT 'PROCESSING', set_subject IMPORTING subject TYPE any, set_message IMPORTING message TYPE any OPTIONAL par1 TYPE any DEFAULT space par2 TYPE any DEFAULT space par3 TYPE any DEFAULT space msgty TYPE symsgty DEFAULT 'I' PREFERRED PARAMETER message, set_error IMPORTING message TYPE any OPTIONAL par1 TYPE any DEFAULT space par2 TYPE any DEFAULT space PREFERRED PARAMETER message, selection_parameters. ENDCLASS. "lcl_logging DEFINITION *---------------------------------------------------------------------- * CLASS lcl_logging IMPLEMENTATION *---------------------------------------------------------------------- CLASS lcl_logging IMPLEMENTATION. METHOD initialize. TRY. CREATE OBJECT go_log EXPORTING i_object = object i_subobject = subobject i_repid = sy-repid. CATCH cx_ishmed_log. "#EC NO_HANDLER * No actual processing here ENDTRY. ENDMETHOD. "initialize METHOD set_subject. DATA: lv_subject TYPE c LENGTH 100. lv_subject = subject. * concatenate '==>' lv_subject into lv_subject SEPARATED BY space. TRANSLATE lv_subject TO UPPER CASE. TRY. go_log->add_free_text( EXPORTING i_msg_type = 'W' i_text = lv_subject ). CATCH cx_ishmed_log. "#EC NO_HANDLER * No actual logic on catch ENDTRY. ENDMETHOD. "set_subject METHOD set_message. " importing message type any, par1, par2 DATA: lv_message TYPE c LENGTH 100. lv_message = message. REPLACE '&' WITH par1 INTO lv_message. CONDENSE lv_message. REPLACE '&' WITH par2 INTO lv_message. CONDENSE lv_message. REPLACE '&' WITH par3 INTO lv_message. CONDENSE lv_message. TRY. go_log->add_free_text( EXPORTING i_msg_type = msgty i_text = lv_message ). CATCH cx_ishmed_log. "#EC NO_HANDLER * No actual logic on catch ENDTRY. ENDMETHOD. "set_message METHOD set_error. " importing message type any, par1, par2 DATA: lv_message TYPE c LENGTH 100. lv_message = message. REPLACE '&' WITH par1 INTO lv_message. REPLACE '&' WITH par2 INTO lv_message. CONDENSE lv_message. TRY. go_log->add_free_text( EXPORTING i_msg_type = 'E' i_text = lv_message ). lcl_logging=>gv_errors_were_logged = abap_true. CATCH cx_ishmed_log. "#EC NO_HANDLER * No actual logic on catch ENDTRY. ENDMETHOD. "set_error METHOD selection_parameters. data: lt_TEXTPOOL type STANDARD TABLE OF textpool, lw_textpool type textpool, lt_RSPARAMS type standard table of RSPARAMS, lw_rsparam type rsparams, begin of lw_pars, par1 type c length 50, par2 type c length 50, par3 type c length 50, end of lw_pars, lt_field_info type STANDARD TABLE OF RSEL_INFO, lw_field_info type rsel_info. * Fetch the report selection texts (includes DDIC referenced texts) CALL FUNCTION 'RS_TEXTPOOL_READ' EXPORTING OBJECTNAME = sy-repid TABLES TPOOL = lt_TEXTPOOL. * This module is called to protect the sequence of parameter fields CALL FUNCTION 'RS_REPORTSELECTIONS_INFO' EXPORTING REPORT = sy-repid DEFAULT_VALUES = ' ' TABLES FIELD_INFO = lt_field_info. * Fetch the selection parameters of the report - as entered by the end user CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS' EXPORTING CURR_REPORT = sy-repid TABLES SELECTION_TABLE = lt_RSPARAMS. * Start logging the values - in the sequence of the selection screen LOOP AT lt_field_info INTO lw_field_info. * Loop through the RSPARAMS, effectively values per selection screen field CLEAR lw_pars. LOOP AT lt_RSPARAMS INTO lw_RSPARAM WHERE selname EQ lw_field_info-name. * Description of the parameter field READ TABLE lt_textpool WITH KEY ID = 'S' KEY = lw_rsparam-selname INTO lw_textpool. IF sy-subrc = 0. lw_pars-par1 = lw_textpool-ENTRY+8. ELSE. lw_pars-par1 = lw_rsparam-selname. ENDIF. * Sign and option: if lw_rsparam-SIGN = 'E'. lw_pars-par2 = 'EXCLUDE'. endif. CASE lw_rsparam-option. WHEN 'EQ'. "lw_pars-par2+8 = 'EQual to'. WHEN 'BT'. lw_pars-par2+8 = 'Between'. WHEN 'GT'. lw_pars-par2+8 = 'Greater Than'. WHEN 'GE'. lw_pars-par2+8 = 'Greater Than or Equal'. WHEN 'LT'. lw_pars-par2+8 = 'Less Than or Equal'. WHEN 'LE'. lw_pars-par2+8 = 'Less Than or Equal'. WHEN 'NE'. lw_pars-par2+8 = 'Not Equal'. WHEN 'CP'. lw_pars-par2+8 = 'Contains Pattern'. WHEN 'NP'. lw_pars-par2+8 = 'Does not contain Pattern'. WHEN 'NB'. lw_pars-par2+8 = 'Outside range'. WHEN OTHERS. lw_pars-par2+8 = lw_rsparam-option. ENDCASE. * Value or value-set: IF lw_rsparam-kind = 'S'. "Select option field IF lw_rsparam-high CO '0 '. IF NOT lw_rsparam-low CO '0 '. lw_pars-par3 = lw_rsparam-low. ENDIF. ELSE. CONCATENATE lw_rsparam-low 'and' lw_rsparam-high INTO lw_pars-par3 SEPARATED BY space. ENDIF. ELSE. "Parameter field IF NOT lw_rsparam-low CO '0 '. lw_pars-par3 = lw_rsparam-low. ENDIF. ENDIF. IF NOT lw_pars-par3 IS INITIAL. set_message( EXPORTING MESSAGE = '=> &: & &' par1 = lw_pars-par1 par2 = lw_pars-par2 par3 = lw_pars-par3 ). ENDIF. ENDLOOP. ENDLOOP. ENDMETHOD. ENDCLASS. "lcl_logging IMPLEMENTATION tables: mara. "For selection screen purpose only PARAMETERS: PA_METER TYPE mara-matnr. SELECT-OPTIONS: SO_OPTIO for mara-matnr. START-OF-SELECTION. lcl_logging=>initialize( ). lcl_logging=>set_subject( 'Selection screen: parameters and select options' ). lcl_logging=>selection_parameters( ). lcl_logging=>set_message( message = 'Today is: &' par1 = sy-datum ). lcl_logging=>set_message( 'A simple message' ). lcl_logging=>set_message( message = 'A simple message - as warning' msgty = 'W' ). lcl_logging=>set_error( 'Error occured ! Red red red' ). lcl_logging=>go_log->display( ). if 1 = 2. lcl_logging=>go_log->save( ). endif.