class ZCL_UTILITIES2 definition public final create public . public section. constants GC_TEXTID_BODY type TDID value 'Z001' ##NO_TEXT. constants GC_TEXTID_SUBJECT type TDID value 'Z002' ##NO_TEXT. class-methods POPUP_TO_CONFIRM importing !IM_TEXT type ANY returning value(RV_ANS) type CHAR4 . class-methods SHOW_MESSAGE_BAPIRET2 importing !T_BAPIRET2 type ARBCIG_RET2_T . class-methods SEND_EMAIL importing !IT_BODY type SOLI_TAB optional !IT_TO type PIQT_MAILADDR optional !IT_CC type PIQT_MAILADDR optional !IT_USERTO type RSM_TT_USER optional !IT_USERCC type RSM_TT_USER optional !IM_ATTC_FILENAME type ANY optional !IM_ATTACHMENT type XSTRING optional !IM_IMMEDIATE type FLAG optional !IM_TRANSID type ANY optional !IM_PARAM1 type ANY optional !IM_PARAM2 type ANY optional !IM_PARAM3 type ANY optional !IM_PARAM4 type ANY optional . class-methods GET_XSTRING_FROM_ITAB importing !IT_FIELDCAT type LVC_T_FCAT optional !IT_SORT type LVC_T_SORT optional !IT_FILT type LVC_T_FILT optional !IS_LAYOUT type LVC_S_LAYO optional !IT_HYPERLINKS type LVC_T_HYPE optional value(IT_DATA) type STANDARD TABLE returning value(R_XSTRING) type XSTRING . class-methods CREATE_TEXT_EDITOR importing !IM_CONT_NAME type ANY !IM_TEXT type ANY optional changing !CO_CONT type ref to CL_GUI_CUSTOM_CONTAINER !CO_EDITOR type ref to CL_GUI_TEXTEDIT . class-methods SET_TEXT_EDITOR importing !IM_TEXT type ANY optional changing !CO_EDITOR type ref to CL_GUI_TEXTEDIT . class-methods GET_TEXT_EMAIL importing !IM_NAME type ANY !IM_ID type ANY exporting value(EV_T_LINES) type TLINET value(EV_STRING) type STRING . class-methods SET_TEXT_EMAIL importing !IM_ID type ANY !IM_NAME type ANY !IM_T_LINES type TLINET . class-methods REPLACE_PARAM_FROM_STRING importing value(IM_PARAM1) type ANY optional value(IM_PARAM2) type ANY optional value(IM_PARAM3) type ANY optional value(IM_PARAM4) type ANY optional changing value(C_STRING) type STRING . protected section. private section. ENDCLASS. CLASS ZCL_UTILITIES2 IMPLEMENTATION. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>CREATE_TEXT_EDITOR * +-------------------------------------------------------------------------------------------------+ * | [--->] IM_CONT_NAME TYPE ANY * | [--->] IM_TEXT TYPE ANY(optional) * | [<-->] CO_CONT TYPE REF TO CL_GUI_CUSTOM_CONTAINER * | [<-->] CO_EDITOR TYPE REF TO CL_GUI_TEXTEDIT * +-------------------------------------------------------------------------------------- METHOD create_text_editor. IF co_cont IS NOT BOUND. CREATE OBJECT co_cont EXPORTING container_name = im_cont_name EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5. ENDIF. IF co_editor IS NOT BOUND. CREATE OBJECT co_editor EXPORTING parent = co_cont wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position * wordwrap_position = line_length wordwrap_to_linebreak_mode = cl_gui_textedit=>true. co_editor->set_toolbar_mode( '0' ). co_editor->set_statusbar_mode('0' ). IF im_text IS NOT INITIAL. set_text_editor( EXPORTING im_text = im_text CHANGING co_editor = co_editor ). ENDIF. ENDIF. ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>GET_TEXT_EMAIL * +-------------------------------------------------------------------------------------------------+ * | [--->] IM_NAME TYPE ANY * | [--->] IM_ID TYPE ANY * | [<---] EV_T_LINES TYPE TLINET * | [<---] EV_STRING TYPE STRING * +-------------------------------------------------------------------------------------- METHOD get_text_email. * DATA: lt_lines TYPE STANDARD TABLE OF tline. CALL FUNCTION 'READ_TEXT' EXPORTING id = CONV thead-tdid( im_id ) language = 'E' name = CONV thead-tdname( im_name ) object = 'ZEMAIL' TABLES lines = ev_t_lines EXCEPTIONS id = 1 language = 2 name = 3 not_found = 4 object = 5 reference_check = 6 wrong_access_to_archive = 7 OTHERS = 8. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. LOOP AT ev_t_lines INTO DATA(ls_lines). IF ev_string IS INITIAL. ev_string = ls_lines-tdline. ELSE. IF ls_lines-tdformat EQ '/'. ev_string = ev_string && ls_lines-tdline. ELSE. ev_string = ev_string && cl_abap_char_utilities=>cr_lf && ls_lines-tdline. ENDIF. ENDIF. ENDLOOP. * LOOP AT lt_lines INTO DATA(ls_lines). * IF rv_output IS INITIAL. * rv_output = ls_lines-tdline. * ELSE. * IF ls_lines-tdformat EQ '/'. * rv_output = rv_output && ls_lines-tdline. * ELSE. * rv_output = rv_output && `; ` && ls_lines-tdline. * ENDIF. * ENDIF. * ENDLOOP. ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>GET_XSTRING_FROM_ITAB * +-------------------------------------------------------------------------------------------------+ * | [--->] IT_FIELDCAT TYPE LVC_T_FCAT(optional) * | [--->] IT_SORT TYPE LVC_T_SORT(optional) * | [--->] IT_FILT TYPE LVC_T_FILT(optional) * | [--->] IS_LAYOUT TYPE LVC_S_LAYO(optional) * | [--->] IT_HYPERLINKS TYPE LVC_T_HYPE(optional) * | [--->] IT_DATA TYPE STANDARD TABLE * | [<-()] R_XSTRING TYPE XSTRING * +-------------------------------------------------------------------------------------- METHOD GET_XSTRING_FROM_ITAB. DATA(lt_data) = REF #( it_data ). IF it_fieldcat IS INITIAL. FIELD-SYMBOLS: TYPE STANDARD TABLE. ASSIGN lt_data->* TO . TRY. cl_salv_table=>factory( EXPORTING list_display = abap_false IMPORTING r_salv_table = DATA(salv_table) CHANGING t_table = ). DATA(lt_fcat) = cl_salv_controller_metadata=>get_lvc_fieldcatalog( r_columns = salv_table->get_columns( ) r_aggregations = salv_table->get_aggregations( ) ). CATCH cx_salv_msg. RETURN. ENDTRY. ELSE. lt_fcat = it_fieldcat. ENDIF. cl_salv_bs_lex=>export_from_result_data_table( EXPORTING is_format = if_salv_bs_lex_format=>mc_format_xlsx ir_result_data_table = cl_salv_ex_util=>factory_result_data_table( r_data = lt_data s_layout = is_layout t_fieldcatalog = lt_fcat t_sort = it_sort t_filter = it_filt t_hyperlinks = it_hyperlinks ) IMPORTING er_result_file = r_xstring ). ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>POPUP_TO_CONFIRM * +-------------------------------------------------------------------------------------------------+ * | [--->] IM_TEXT TYPE ANY * | [<-()] RV_ANS TYPE CHAR4 * +-------------------------------------------------------------------------------------- METHOD popup_to_confirm. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING text_question = im_text text_button_1 = 'Yes'(001) icon_button_1 = 'ICON_OKAY' text_button_2 = 'No'(002) icon_button_2 = 'ICON_CANCEL' display_cancel_button = '' IMPORTING answer = rv_ans EXCEPTIONS text_not_found = 1 OTHERS = 2. ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>SEND_EMAIL * +-------------------------------------------------------------------------------------------------+ * | [--->] IT_BODY TYPE SOLI_TAB(optional) * | [--->] IT_TO TYPE PIQT_MAILADDR(optional) * | [--->] IT_CC TYPE PIQT_MAILADDR(optional) * | [--->] IT_USERTO TYPE RSM_TT_USER(optional) * | [--->] IT_USERCC TYPE RSM_TT_USER(optional) * | [--->] IM_ATTC_FILENAME TYPE ANY(optional) * | [--->] IM_ATTACHMENT TYPE XSTRING(optional) * | [--->] IM_IMMEDIATE TYPE FLAG(optional) * | [--->] IM_TRANSID TYPE ANY(optional) * | [--->] IM_PARAM1 TYPE ANY(optional) * | [--->] IM_PARAM2 TYPE ANY(optional) * | [--->] IM_PARAM3 TYPE ANY(optional) * | [--->] IM_PARAM4 TYPE ANY(optional) * +-------------------------------------------------------------------------------------- METHOD send_email. DATA: lo_send_request TYPE REF TO cl_bcs, lo_document TYPE REF TO cl_document_bcs, lo_recipient TYPE REF TO if_recipient_bcs, lo_bcs_exception TYPE REF TO cx_bcs. DATA: sent_to_all TYPE os_boolean, lt_body TYPE soli_tab, binary_content TYPE solix_tab. DATA: lv_string TYPE string. DATA: lv_subject TYPE so_obj_des, gv_sub_name TYPE thead-tdname. TRY. * -------- create persistent send request ------------------------ lo_send_request = cl_bcs=>create_persistent( ). * -------- create and set lo_document with attachment --------------- * create lo_document object from internal table with text * APPEND 'Dear Madam, ......' TO lt_body. get_text_email( EXPORTING im_id = gc_textid_body im_name = im_transid IMPORTING ev_string = lv_string ). replace_param_from_string( EXPORTING im_param1 = im_param1 im_param2 = im_param2 im_param3 = im_param3 im_param4 = im_param4 CHANGING c_string = lv_string ). SPLIT lv_string AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_body. " get subject * gv_sub_name = |{ im_transid }_SUB|. zcl_utilities2=>get_text_email( EXPORTING im_id = gc_textid_subject im_name = im_transid IMPORTING ev_string = lv_string ). replace_param_from_string( EXPORTING im_param1 = im_param1 im_param2 = im_param2 im_param3 = im_param3 im_param4 = im_param4 CHANGING c_string = lv_string ). lv_subject = lv_string. lo_document = cl_document_bcs=>create_document( i_type = 'RAW' i_text = lt_body * i_subject = im_subject ). i_subject = lv_subject ). * add the spread sheet as attachment to lo_document object DATA: lt_att_head TYPE soli_tab, lv_filename TYPE string, lv_text_line TYPE soli. lv_filename = |{ im_attc_filename }.xlsx|. CONCATENATE '&SO_FILENAME=' lv_filename INTO lv_text_line. APPEND lv_text_line TO lt_att_head. IF im_attachment IS NOT INITIAL. DATA(lt_hex) = cl_bcs_convert=>xstring_to_solix( im_attachment ). lo_document->add_attachment( i_attachment_type = 'BIN' i_attachment_subject = CONV sood-objdes( lv_filename ) i_attachment_size = CONV #( xstrlen( im_attachment ) ) i_att_content_hex = lt_hex i_attachment_header = lt_att_head ). ENDIF. * add lo_document object to send request lo_send_request->set_document( lo_document ). * --------- add lo_recipient (e-mail address) ----------------------- * create lo_recipient object LOOP AT it_to INTO DATA(ls_to). CLEAR: lo_recipient. lo_recipient = cl_cam_address_bcs=>create_internet_address( ls_to ). lo_send_request->add_recipient( i_recipient = lo_recipient i_express = im_immediate ). ENDLOOP. LOOP AT it_cc INTO DATA(ls_cc). CLEAR: lo_recipient. lo_recipient = cl_cam_address_bcs=>create_internet_address( ls_cc ). lo_send_request->add_recipient( i_recipient = lo_recipient i_copy = 'X' i_express = im_immediate ). ENDLOOP. IF it_userto IS NOT INITIAL. SELECT b~smtp_addr FROM usr21 AS a INNER JOIN adr6 AS b ON a~addrnumber = b~addrnumber AND a~persnumber = b~persnumber INTO TABLE @DATA(lt_usr21to) FOR ALL ENTRIES IN @it_userto WHERE bname = @it_userto-table_line. LOOP AT lt_usr21to INTO DATA(ls_usr21to). CLEAR: lo_recipient. * lo_recipient = cl_cam_address_bcs=>create( i_addrnumber = ls_usr21to-addrnumber i_persnumber = ls_usr21to-persnumber ). lo_recipient = cl_cam_address_bcs=>create_internet_address( ls_usr21to-smtp_addr ). lo_send_request->add_recipient( i_recipient = lo_recipient i_express = im_immediate ). ENDLOOP. ENDIF. IF it_usercc IS NOT INITIAL. SELECT b~smtp_addr FROM usr21 AS a INNER JOIN adr6 AS b ON a~addrnumber = b~addrnumber AND a~persnumber = b~persnumber INTO TABLE @DATA(lt_usr21cc) FOR ALL ENTRIES IN @it_usercc WHERE bname = @it_usercc-table_line. LOOP AT lt_usr21cc INTO DATA(ls_usr21cc). CLEAR: lo_recipient. * lo_recipient = cl_cam_address_bcs=>create( i_addrnumber = ls_usr21cc-addrnumber i_persnumber = ls_usr21cc-persnumber ). lo_recipient = cl_cam_address_bcs=>create_internet_address( ls_usr21cc-smtp_addr ). lo_send_request->add_recipient( i_recipient = lo_recipient i_copy = 'X' i_express = im_immediate ). ENDLOOP. ENDIF. * ---------- send lo_document --------------------------------------- sent_to_all = lo_send_request->send( i_with_error_screen = 'X' ). COMMIT WORK. IF sent_to_all IS INITIAL. * MESSAGE i500(sbcoms) WITH mailto. MESSAGE i500(sbcoms) WITH 'all recipients'. ELSE. MESSAGE s022(so). ENDIF. * ------------ exception handling ---------------------------------- CATCH cx_bcs INTO lo_bcs_exception. MESSAGE i865(so) WITH lo_bcs_exception->error_type. ENDTRY. ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>SET_TEXT_EDITOR * +-------------------------------------------------------------------------------------------------+ * | [--->] IM_TEXT TYPE ANY(optional) * | [<-->] CO_EDITOR TYPE REF TO CL_GUI_TEXTEDIT * +-------------------------------------------------------------------------------------- METHOD set_text_editor. DATA: lv_string TYPE string. CHECK co_editor IS BOUND. lv_string = im_text. co_editor->set_textstream( lv_string ). ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>SET_TEXT_EMAIL * +-------------------------------------------------------------------------------------------------+ * | [--->] IM_ID TYPE ANY * | [--->] IM_NAME TYPE ANY * | [--->] IM_T_LINES TYPE TLINET * +-------------------------------------------------------------------------------------- METHOD set_text_email. DATA: ls_header TYPE thead. ls_header-tdid = im_id. ls_header-tdspras = 'E'. ls_header-tdobject = 'ZEMAIL'. ls_header-tdname = im_name. CALL FUNCTION 'SAVE_TEXT' EXPORTING * CLIENT = SY-MANDT header = ls_header * INSERT = ' ' SAVEMODE_DIRECT = 'X' * OWNER_SPECIFIED = ' ' * LOCAL_CAT = ' ' * KEEP_LAST_CHANGED = ' ' * IMPORTING * FUNCTION = * NEWHEADER = TABLES lines = im_t_lines EXCEPTIONS id = 1 language = 2 name = 3 object = 4 OTHERS = 5. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. COMMIT WORK AND WAIT. ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>SHOW_MESSAGE_BAPIRET2 * +-------------------------------------------------------------------------------------------------+ * | [--->] T_BAPIRET2 TYPE ARBCIG_RET2_T * +-------------------------------------------------------------------------------------- METHOD show_message_bapiret2. DATA: lt_message TYPE esp1_message_tab_type. lt_message = VALUE #( FOR i IN t_bapiret2 ( msgid = i-id msgty = i-type msgno = i-number msgv1 = i-message_v1 msgv2 = i-message_v2 msgv3 = i-message_v3 msgv4 = i-message_v4 lineno = i-row ) ). CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP' TABLES i_message_tab = lt_message. ENDMETHOD. * ---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_UTILITIES2=>REPLACE_PARAM_FROM_STRING * +-------------------------------------------------------------------------------------------------+ * | [--->] IM_PARAM1 TYPE ANY(optional) * | [--->] IM_PARAM2 TYPE ANY(optional) * | [--->] IM_PARAM3 TYPE ANY(optional) * | [--->] IM_PARAM4 TYPE ANY(optional) * | [<-->] C_STRING TYPE STRING * +-------------------------------------------------------------------------------------- METHOD replace_param_from_string. REPLACE ALL OCCURRENCES OF '&1' IN c_string WITH im_param1. REPLACE ALL OCCURRENCES OF '&2' IN c_string WITH im_param2. REPLACE ALL OCCURRENCES OF '&3' IN c_string WITH im_param3. REPLACE ALL OCCURRENCES OF '&4' IN c_string WITH im_param4. ENDMETHOD. ENDCLASS.