* _______ _______ _______ _______ _______ _______ ______ _______ _______ ______ _______ * | _ | _ | _ | | | _ | || _ | _ | _ | | _ | * | |_| | |_| | |_| | _ | | |_| | _ | |_| | |_| | | || | |_| | * | | | | |_| | | | | | | | | |_||_| | * | | _ || | ___| _| | |_| | | _ || __ | | * | _ | |_| | _ | | | |_| _ | | _ | |_| | | | | _ | * |__| |__|_______|__| |__|___| |_______|__| |__|______||__| |__|_______|___| |_|__| |__| * www.abapcadabra.com * *------------------------------------------------------------------------------------------- * program : ZABAPCADABRA_EMAIL_APPLOG * title : Pick up a Business Application Log and email it to a receiver * functional area : Cross modules * environment : 4.7 * program Function : A simple add-on that can be used to port Business Application * Log (Trx SLG0, SLG1) to a reciever. The Application log * would typically hold error messages from another source such * as an interface. Subject, email body and receivers * can be set via the report selection screen. * Documentation : Search for "Mail Business Application Log" on AbapcadabrA.com * Previous version : This is the initial version * Developer name : Wim Maasdam * Development date : 09/06/2015 * Version : 0.1 *--------------------------------------------------------------------- * Change list: * Date Description * 09/06/2015 Initial release * 22/09/2015 Issue with shortened fields *--------------------------------------------------------------------- REPORT ZHRI_EMAIL_BUSINESS_APP_LOG. TABLES: stxh, sscrfields. "Selection screen purpose only TYPE-POOLS: VRM. *--------------------------------------------------------------------- * C L A S S D E F I N I T I O N *--------------------------------------------------------------------- CLASS lcl_utilities DEFINITION. PUBLIC SECTION. CLASS-METHODS: set_listbox_static, f4_so10_texts CHANGING tdname TYPE stxh-tdname, call_so10_editor IMPORTING tdname TYPE stxh-tdname tdspras TYPE stxh-tdspras. ENDCLASS. "lcl_f4_processing DEFINITION CLASS lcl_bal DEFINITION. PUBLIC SECTION. TYPES: BEGIN OF ty_content, line type char255, END OF ty_content. CLASS-DATA: gw_balhdr type BALHDR, gt_attachment_lines TYPE STANDARD TABLE OF ty_content, gv_nr_of_errors type sy-dbcnt, gv_nr_of_messages type sy-dbcnt, gv_nf_of_logs type sy-dbcnt. CLASS-METHODS: select_bal_log, read_bal_messages. PRIVATE SECTION. CLASS-DATA: gw_log_filter TYPE bal_s_lfil. CLASS-METHODS: set_filter_criteria. ENDCLASS. "lcl_f4_processing DEFINITION CLASS lcl_mailman DEFINITION. PUBLIC SECTION. TYPES: BEGIN OF ty_receiver, email TYPE ad_smtpadr, name TYPE ad_smtpadr, END OF ty_receiver. CLASS-DATA: gt_receivers TYPE STANDARD TABLE OF ty_receiver, gt_email_body TYPE BCSY_TEXT, gv_subject TYPE SOOD-OBJDES, gv_att_subject TYPE SOOD-OBJDES. CLASS-METHODS: set_subject IMPORTING subject TYPE ANY, read_body_text IMPORTING tdname TYPE stxh-tdname tdspras TYPE stxh-tdspras, set_receivers IMPORTING r1 TYPE ANY r2 TYPE ANY r3 TYPE ANY r4 TYPE ANY r5 TYPE ANY, set_parameters, send_email. ENDCLASS. *--------------------------------------------------------------------- * S E L E C T I O N - S C R E E N *--------------------------------------------------------------------- selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_b1 FOR FIELD pa_objec. PARAMETERS: pa_objec TYPE balhdr-object OBLIGATORY. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_b2 FOR FIELD pa_subob. PARAMETERS: pa_subob TYPE balhdr-subobject OBLIGATORY. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_b3 FOR FIELD pa_extnr. PARAMETERS: pa_extnr TYPE balhdr-extnumber. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(14) lbl_b4. selection-SCREEN COMMENT 15(13) lbl_b5 FOR FIELD pa_tuser. PARAMETERS: pa_tuser TYPE balhdr-ALUSER. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 15(13) lbl_b6 FOR FIELD pa_trans. PARAMETERS: pa_trans TYPE BALHDR-ALTCODE. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 15(13) lbl_b7 FOR FIELD pa_aprog. PARAMETERS: pa_aprog TYPE BALHDR-ALPROG. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_c1 FOR FIELD pa_when. PARAMETERS: pa_when TYPE C LENGTH 3 AS LISTBOX VISIBLE LENGTH 32 DEFAULT 'MI3'. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_c2 FOR FIELD pa_dfrom. PARAMETERS: pa_dfrom TYPE d. PARAMETERS: pa_tfrom TYPE t. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_c3 FOR FIELD pa_dto. PARAMETERS: pa_dto TYPE d DEFAULT sy-datum. PARAMETERS: pa_tto TYPE t DEFAULT sy-uzeit. selection-SCREEN END OF LINE. selection-SCREEN SKIP. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_10 FOR FIELD pa_subj. PARAMETERS: pa_subj TYPE C length 100 LOWER CASE visible length 56. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_11 FOR FIELD pa_body. PARAMETERS: pa_body TYPE stxh-tdname. SELECTION-SCREEN PUSHBUTTON (4) but_01 USER-COMMAND SO10. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_12 FOR FIELD pa_langu. PARAMETERS: pa_langu TYPE stxh-tdspras DEFAULT sy-langu. selection-SCREEN END OF LINE. selection-SCREEN SKIP. selection-SCREEN BEGIN OF LINE. selection-SCREEN COMMENT 1(23) lbl_13 FOR FIELD pa_rec1. PARAMETERS: pa_rec1 TYPE C length 100 LOWER CASE visible length 50 OBLIGATORY. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN POSITION 25. PARAMETERS: pa_rec2 TYPE C length 100 LOWER CASE visible length 50. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN POSITION 25. PARAMETERS: pa_rec3 TYPE C length 100 LOWER CASE visible length 50. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN POSITION 25. PARAMETERS: pa_rec4 TYPE C length 100 LOWER CASE visible length 50. selection-SCREEN END OF LINE. selection-SCREEN BEGIN OF LINE. selection-SCREEN POSITION 25. PARAMETERS: pa_rec5 TYPE C length 100 LOWER CASE visible length 50. selection-SCREEN END OF LINE. selection-SCREEN SKIP. selection-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (70) lbl_abca USER-COMMAND ABAPCADABRA VISIBLE LENGTH 5. selection-SCREEN END OF LINE. AT selection-SCREEN ON VALUE-request FOR pa_body. lcl_utilities=>f4_so10_texts( CHANGING tdname = pa_body ). AT SELECTION-SCREEN. CASE sscrfields-ucomm. WHEN 'SO10'. lcl_utilities=>call_so10_editor( EXPORTING tdname = pa_body tdspras = pa_langu ). WHEN 'ABAPCADABRA'. CALL FUNCTION 'CALL_BROWSER' EXPORTING URL = 'http://abapcadabra.com/index.php/interfacing/535-mail-an-app-log' EXCEPTIONS OTHERS = 0. ENDCASE. *--------------------------------------------------------------------- * C L A S S I M P L E M E N T A T I O N *--------------------------------------------------------------------- CLASS lcl_utilities IMPLEMENTATION. METHOD set_listbox_static. DATA: lt_list TYPE vrm_values, lw_list LIKE LINE OF lt_list. DEFINE set_format. lw_list-KEY = &1. IF &2 IS INITIAL. lw_list-TEXT = &1. ELSE. lw_list-TEXT = &2. ENDIF. APPEND lw_list TO lt_list. END-OF-DEFINITION. CLEAR lt_list[]. set_format: 'MIN' '3 minutes', 'MI2' '10 minutes', 'MI3' '30 minutes', 'HR1' '1 hour', 'HR2' '4 hours', 'TDY' 'Today', 'TD2' '1 day (24 hrs)', 'OTH' 'As specified below'. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING ID = 'PA_WHEN' values = lt_list. ENDMETHOD. METHOD f4_so10_texts. TYPES: BEGIN OF lty_columns, * List the fields you want to show in the F4 popup tdname TYPE stxh-tdname, END OF lty_columns. DATA: lt_columns TYPE STANDARD TABLE OF lty_columns. CLEAR: lt_columns[]. * Set selection values / note this is just for example purpose: SELECT tdname FROM stxh INTO TABLE lt_columns WHERE TDOBJECT = 'TEXT' AND TDID = 'ST ' AND TDSPRAS = pa_langu. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'TDNAME' dynpprog = SY-REPID dynpnr = '1000' dynprofield = 'PA_BODY' WINDOW_TITLE = 'Select a standard SO10 text' value_org = 'S' TABLES value_tab = lt_columns. ENDMETHOD. METHOD call_so10_editor. DATA: lt_bdcdata TYPE STANDARD TABLE OF bdcdata, lw_bdcdata TYPE bdcdata. * bdc_add 'X' 'PROGRAM_NAME' 'SCREEN NUMBER'. * bdc_add ' ' 'FIELDNAME' 'FIELDVALUE'. DEFINE bdc_add. CLEAR lw_bdcdata. lw_bdcdata-dynbegin = &1. IF &1 EQ 'X'. lw_bdcdata-PROGRAM = &2. lw_bdcdata-DYNPRO = &3. ELSE. lw_bdcdata-fnam = &2. lw_bdcdata-fval = &3. ENDIF. APPEND lw_bdcdata TO lt_bdcdata. END-OF-DEFINITION. CLEAR lt_bdcdata. bdc_add: 'X' 'SAPMSSCE' '1100', ' ' 'RSSCE-TDNAME' tdname, ' ' 'RSSCE-TDSPRAS' tdspras. CALL TRANSACTION 'SO10' USING lt_bdcdata MODE 'E'. ENDMETHOD. ENDCLASS. "lcl_f4_processing IMPLEMENTATION CLASS lcl_bal IMPLEMENTATION. method set_filter_criteria. data: begin of lw_range_mask, sign type c length 1, option type c length 2, low type c length 100, end of lw_range_mask. clear: gw_log_filter. lw_range_mask = 'IEQ'. "Include values EQual to .. * The gw_logfilter acts as a selection instruction to the BAL_DB_SEARCH function module, * so parameters that are set on the selection screen will each be checked and where * applicable filter settings will be applied to gw_log_filter: lw_range_mask-low = pa_objec. append lw_range_mask to GW_LOG_FILTER-OBJECT. lw_range_mask-low = pa_subob. append lw_range_mask to GW_LOG_FILTER-SUBOBJECT. if not pa_extnr is initial. lw_range_mask-low = pa_extnr. append lw_range_mask to GW_LOG_FILTER-EXTNUMBER. endif. if not pa_tuser is initial. lw_range_mask-low = pa_tuser. append lw_range_mask to GW_LOG_FILTER-ALUSER. endif. if not pa_trans is initial. lw_range_mask-low = pa_trans. append lw_range_mask to GW_LOG_FILTER-ALTCODE. endif. if not pa_aprog is initial. lw_range_mask-low = pa_aprog. append lw_range_mask to GW_LOG_FILTER-ALPROG. endif. * Set the time to select to(till) now GW_LOG_FILTER-date_time-date_to = sy-datum. GW_LOG_FILTER-date_time-time_to = sy-uzeit. case pa_when. when 'MIN'. "3 minutes CL_BS_PERIOD_TOOLSET_BASICS=>SUBTRACT_MINUTES_FROM_DATE( exporting IV_DATE = GW_LOG_FILTER-date_time-date_to IV_TIME = GW_LOG_FILTER-date_time-time_to IV_MINUTES = 3 importing EV_DATE = GW_LOG_FILTER-date_time-date_from EV_TIME = GW_LOG_FILTER-date_time-time_from ). when 'MI2'. "10 minutes CL_BS_PERIOD_TOOLSET_BASICS=>SUBTRACT_MINUTES_FROM_DATE( exporting IV_DATE = GW_LOG_FILTER-date_time-date_to IV_TIME = GW_LOG_FILTER-date_time-time_to IV_MINUTES = 10 importing EV_DATE = GW_LOG_FILTER-date_time-date_from EV_TIME = GW_LOG_FILTER-date_time-time_from ). when 'MI3'. "30 minutes CL_BS_PERIOD_TOOLSET_BASICS=>SUBTRACT_MINUTES_FROM_DATE( exporting IV_DATE = GW_LOG_FILTER-date_time-date_to IV_TIME = GW_LOG_FILTER-date_time-time_to IV_MINUTES = 30 importing EV_DATE = GW_LOG_FILTER-date_time-date_from EV_TIME = GW_LOG_FILTER-date_time-time_from ). when 'HR1'. "1 hour CL_BS_PERIOD_TOOLSET_BASICS=>SUBTRACT_HOURS_FROM_DATE( exporting IV_DATE = GW_LOG_FILTER-date_time-date_to IV_TIME = GW_LOG_FILTER-date_time-time_to IV_HOURS = 1 importing EV_DATE = GW_LOG_FILTER-date_time-date_from EV_TIME = GW_LOG_FILTER-date_time-time_from ). when 'HR2'. "4 hours CL_BS_PERIOD_TOOLSET_BASICS=>SUBTRACT_HOURS_FROM_DATE( exporting IV_DATE = GW_LOG_FILTER-date_time-date_to IV_TIME = GW_LOG_FILTER-date_time-time_to IV_HOURS = 4 importing EV_DATE = GW_LOG_FILTER-date_time-date_from EV_TIME = GW_LOG_FILTER-date_time-time_from ). when 'TDY'. "Today GW_LOG_FILTER-date_time-date_from = GW_LOG_FILTER-date_time-date_from - 1. GW_LOG_FILTER-date_time-time_from = GW_LOG_FILTER-date_time-time_to. when 'TD2'. "1 day (24 hrs) GW_LOG_FILTER-date_time-date_from = GW_LOG_FILTER-date_time-date_from. clear GW_LOG_FILTER-date_time-time_from. when 'OTH'. "As specified below GW_LOG_FILTER-date_time-date_from = pa_dfrom. GW_LOG_FILTER-date_time-time_from = pa_tfrom. GW_LOG_FILTER-date_time-date_to = pa_dto. GW_LOG_FILTER-date_time-time_to = pa_tto. endcase. endmethod. method select_bal_log. data: lt_log_header TYPE balhdr_t. set_filter_criteria( ). * Select the BAL LOG entries that are to be emailed: CALL FUNCTION 'BAL_DB_SEARCH' EXPORTING i_s_log_filter = gw_log_filter IMPORTING e_t_log_header = lt_log_header EXCEPTIONS OTHERS = 2. clear gv_nf_of_logs. loop at lt_log_header into gw_balhdr. * The last one is deemed most recent - only 1 is processed, however the number of logs * found is counted: add 1 to gv_nf_of_logs. endloop. endmethod. method read_bal_messages. * Read BAL log that was pinpointed before. Fetch messages and populate the * attachment text lines with the messages from BAL. data: lt_balhdr type BALHDR_T, lt_log_handle type BAL_T_LOGH, lt_msg_handle type BAL_T_MSGH, lw_msg_handle type BALMSGHNDL, lw_message type BAL_S_MSG, lw_message_text type c length 90, lv_timestamp type c length 22, lw_content_line type ty_content. check not gw_balhdr is initial. clear: lt_balhdr[], gv_nr_of_errors. append gw_balhdr to lt_balhdr. * Log's in den Hauptspeicher laden CALL FUNCTION 'BAL_DB_LOAD' EXPORTING i_t_log_header = lt_balhdr * i_lock_handling = 0 IMPORTING e_t_log_handle = lt_log_handle e_t_msg_handle = lt_msg_handle EXCEPTIONS OTHERS = 4. check sy-subrc = 0. LOOP AT lt_msg_handle INTO lw_msg_handle. CALL FUNCTION 'BAL_LOG_MSG_READ' EXPORTING I_S_MSG_HANDLE = lw_msg_handle IMPORTING E_S_MSG = lw_message E_TXT_MSG = lw_message_text EXCEPTIONS OTHERS = 4. IF SY-SUBRC = 0. clear lw_content_line. if lw_message-MSGTY = 'E'. lw_content_line = 'ERROR'. add 1 to gv_nr_of_errors. endif. * Timestamp: UTC time stamp in long form (YYYYMMDDhhmmss,mmmuuun) write lw_message-time_stmp to lv_timestamp. write lv_timestamp+8 using edit mask '|__:__:__|' to lw_content_line+5(10). lw_content_line+15(90) = lw_message_text. append lw_content_line to GT_ATTACHMENT_LINES. ENDIF. ENDLOOP. check not gt_attachment_lines[] is initial. describe table gt_attachment_lines lines gv_nr_of_messages. * Add a header to the attachment lines insert 'Type |Time |Message' into gt_attachment_lines index 1. insert space into gt_attachment_lines index 1. lw_content_line = ' Date:'. write gw_balhdr-ALDATE dd/mm/yyyy to lw_content_line+12(10). insert lw_content_line into gt_attachment_lines index 1. lw_content_line = ' Subobject:'. lw_content_line+12 = gw_balhdr-SUBOBJECT. insert lw_content_line into gt_attachment_lines index 1. lw_content_line = ' Object:'. lw_content_line+12 = gw_balhdr-OBJECT. insert lw_content_line into gt_attachment_lines index 1. endmethod. ENDCLASS. CLASS lcl_mailman IMPLEMENTATION. METHOD set_subject. IF NOT subject IS INITIAL. gv_subject = subject. ELSE. CONCATENATE 'Message from SAP' sy-sysid 'client' sy-mandt INTO gv_subject SEPARATED BY space. ENDIF. ENDMETHOD. METHOD read_body_text. DATA: lt_lines TYPE STANDARD TABLE OF TLINE, lw_tline TYPE TLINE. IF NOT tdname IS INITIAL. * Read the standard SO10 longtext CLEAR: lt_lines[]. CALL FUNCTION 'READ_TEXT' EXPORTING ID = 'ST' LANGUAGE = tdspras NAME = tdname OBJECT = 'TEXT' TABLES LINES = lt_lines EXCEPTIONS OTHERS = 0. LOOP AT lt_lines INTO lw_tline. APPEND lw_tline-tdline TO gt_email_body. ENDLOOP. ENDIF. APPEND space TO gt_email_body. CONCATENATE 'This email was created in SAP' sy-sysid 'client' sy-mandt INTO lw_tline-tdline SEPARATED BY space. APPEND lw_tline-tdline TO gt_email_body. ENDMETHOD. METHOD set_receivers. DATA: lw_receiver TYPE ty_receiver. lw_receiver-email = r1. APPEND lw_receiver TO gt_receivers. IF NOT R2 IS INITIAL. lw_receiver-email = r2. APPEND lw_receiver TO gt_receivers. ENDIF. IF NOT R3 IS INITIAL. lw_receiver-email = r3. APPEND lw_receiver TO gt_receivers. ENDIF. IF NOT R4 IS INITIAL. lw_receiver-email = r4. APPEND lw_receiver TO gt_receivers. ENDIF. IF NOT R5 IS INITIAL. lw_receiver-email = r5. APPEND lw_receiver TO gt_receivers. ENDIF. ENDMETHOD. METHOD set_parameters. data: lv_errorcounter type c length 5, lv_logcounter type c length 5, lv_date type c length 10, lv_time type c length 8. field-symbols: type SOLI. * This method will scan the Subject text line and the body text * of the email for {parameter} settings and replace them when known: define scanner. replace '{errorcount}' in &1 with lv_errorcounter. replace '{system}' in &1 with sy-sysid. replace '{client}' in &1 with sy-mandt. replace '{date}' in &1 with lv_date. replace '{time}' in &1 with lv_time. replace '{object}' in &1 with pa_objec. replace '{subobject}' in &1 with pa_subob. replace '{external}' in &1 with pa_extnr. replace '{logcounter}' in &1 with lv_logcounter. replace '{jobstep}' in &1 with sy-repid. * Add other parameter assignments here... end-of-definition. write: lcl_bal=>gv_nr_of_errors to lv_errorcounter. write: lcl_bal=>gv_nf_of_logs to lv_logcounter. write: sy-datum dd/mm/yyyy to lv_date. write: sy-uzeit dd/mm/yyyy to lv_time. scanner: gv_subject. loop at gt_email_body assigning . scanner: . endloop. ENDMETHOD. METHOD send_email. * local objects - referencing classes DATA: lo_send_request TYPE REF TO cl_bcs, lo_document TYPE REF TO cl_document_bcs, lo_receiver TYPE REF TO cl_cam_address_bcs, lo_sender TYPE REF TO cl_sapuser_bcs, * pool of help variables lv_status TYPE os_boolean, lv_length_hlp TYPE I, lv_length_att TYPE sood-objlen, lt_solix TYPE solix_tab, lw_receiver TYPE ty_receiver. TRY. * Create a request handler lo_send_request = cl_bcs=>create_persistent( ). * Link the body text to the email (document type RAW, importance 0 * and sensitivity F, all defaults) cl_document_bcs=>create_from_text( EXPORTING i_text = gt_email_body i_subject = gv_subject RECEIVING result = lo_document ). * Set the document on the request lo_send_request->set_document( EXPORTING i_document = lo_document ). * Add attachment CALL FUNCTION 'SCMS_TEXT_TO_BINARY' IMPORTING OUTPUT_LENGTH = lv_length_hlp TABLES TEXT_TAB = lcl_bal=>gt_attachment_lines BINARY_TAB = lt_solix EXCEPTIONS OTHERS = 0. lv_length_att = lv_length_hlp. concatenate lcl_bal=>gw_balhdr-ALDATE+6(2) lcl_bal=>gw_balhdr-ALDATE+4(2) lcl_bal=>gw_balhdr-ALDATE(4) into gv_att_subject SEPARATED BY '-'. write lcl_bal=>gw_balhdr-ALTIME using edit mask '~__:__' to gv_att_subject+11. concatenate 'SAPLOG' gv_att_subject '.txt' into gv_att_subject. * Add attachment to the document lo_document->add_attachment( EXPORTING i_attachment_type = 'BIN' "As binary (even the textlines) i_attachment_subject = gv_att_subject i_attachment_size = lv_length_att i_att_content_hex = lt_solix ). * Set the receivers LOOP AT gt_receivers INTO lw_receiver. cl_cam_address_bcs=>create_internet_address( EXPORTING i_address_string = lw_receiver-email i_address_name = lw_receiver-name RECEIVING result = lo_receiver ). lo_send_request->add_recipient( EXPORTING i_recipient = lo_receiver ). ENDLOOP. * Set the sender lo_sender = cl_sapuser_bcs=>create( sy-uname ). lo_send_request->set_sender( EXPORTING i_sender = lo_sender ). * Send the email lv_status = lo_send_request->send( ). CATCH cx_send_req_bcs. CATCH cx_document_bcs. CATCH cx_address_bcs. ENDTRY. IF lv_status = 'X'. *------------------------------ COMMIT WORK. *------------------------------ message 'An email has been created (check SOST)' type 'S'. ENDIF. ENDMETHOD. "send_email ENDCLASS. *--------------------------------------------------------------------- * I N I T I T A L I Z A T I O N *--------------------------------------------------------------------- INITIALIZATION. * All texts for this report have been set up as hard-coded texts (no use * of the report text-pool). Reason: easy copying of report source code. lbl_abca = '@N5\QMore on AbapcadabrA.com@'. lbl_b1 = 'Object'. lbl_b2 = 'Subobject'. lbl_b3 = 'External ID'. lbl_b4 = 'Triggered by'. lbl_b5 = 'User'. lbl_b6 = 'Transaction'. lbl_b7 = 'Report'. lbl_c1 = 'Age of the log'. lbl_c2 = 'From (date/time)'. lbl_c3 = 'To (date/time)'. lbl_10 = 'Subject'. lbl_11 = 'Body text'. lbl_12 = 'Language'. lbl_13 = 'Receiver(s)'. but_01 = '@3I@'. lcl_utilities=>set_listbox_static( ). *--------------------------------------------------------------------- * S T A R T - O F - S E L E C T I O N *--------------------------------------------------------------------- start-OF-selection. lcl_mailman=>set_subject( EXPORTING subject = pa_subj ). lcl_mailman=>read_body_text( EXPORTING tdname = pa_body tdspras = pa_langu ). lcl_mailman=>set_receivers( EXPORTING r1 = pa_rec1 r2 = pa_rec2 r3 = pa_rec3 r4 = pa_rec4 r5 = pa_rec5 ). lcl_bal=>select_bal_log( ). lcl_bal=>read_bal_messages( ). "<= populates report on gt_attachment_lines[] if not lcl_bal=>gt_attachment_lines[] is initial. lcl_mailman=>set_parameters( ). lcl_mailman=>send_email( ). else. message 'No Business Application Log found - no email sent' type 'S'. endif.