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.