*&---------------------------------------------------------------------* *& Report z_supplier_email *& *----------------------------------------------------------------------* * FLOE: Report to Trigger Mass Correspondence Email * *----------------------------------------------------------------------* * Sample program to trigger mass output to suppliers * *----------------------------------------------------------------------* REPORT z_supplier_email. * TABLES: lfa1, lfb1, lfm1. * * TYPES: BEGIN OF ty_vendor_list, lifnr TYPE lifnr, name1 TYPE name1, adrnr TYPE adrnr, email TYPE ad_smtpadr, spras TYPE spras, bukrs TYPE bukrs, ekorg TYPE ekorg, lfabc TYPE lfabc, zsabe TYPE dzsabe_k, END OF ty_vendor_list. * DATA: ls_vendor_list TYPE ty_vendor_list, lt_vendor_list TYPE TABLE OF ty_vendor_list, l_lifnr TYPE lifnr. * DATA: lt_rec_email TYPE /floe/rec_email_t, ls_rec_email TYPE /floe/rec_email_s, lt_mess TYPE bapiret2_t, ls_mess TYPE bapiret2, lv_subrc TYPE sysubrc, lv_importance TYPE /floe/importance, lv_message TYPE string, lt_vars TYPE /floe/vars_t, lv_eid TYPE /floe/eid, lt_suc_mess TYPE TABLE OF string, lv_error TYPE flag. * SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-015. SELECTION-SCREEN SKIP 1. SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr, s_land1 FOR lfa1-land1, s_bukrs FOR lfb1-bukrs, s_ekorg FOR lfm1-ekorg. SELECTION-SCREEN END OF BLOCK c. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001. SELECTION-SCREEN SKIP 1. PARAMETERS: p_etype TYPE /floe/etype_code MATCHCODE OBJECT /floe/etype OBLIGATORY, p_elang TYPE /floe/elang, p_doc TYPE /floe/doc_ref. SELECTION-SCREEN END OF BLOCK a. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-007. SELECTION-SCREEN SKIP 1. PARAMETERS: p_send TYPE /floe/send_immediately. SELECTION-SCREEN SKIP 2. SELECTION-SCREEN COMMENT 01(79) text-006. PARAMETERS: p_im_l RADIOBUTTON GROUP gr1, p_im_n RADIOBUTTON GROUP gr1 DEFAULT 'X', p_im_h RADIOBUTTON GROUP gr1. SELECTION-SCREEN END OF BLOCK b. * INITIALIZATION. * p_elang = sy-langu. * START-OF-SELECTION. * Get vendor list. * SELECT lifnr name1 adrnr spras FROM lfa1 INTO CORRESPONDING FIELDS OF TABLE lt_vendor_list WHERE lifnr IN s_lifnr AND land1 IN s_land1. * LOOP AT lt_vendor_list INTO ls_vendor_list. * SELECT SINGLE bukrs zsabe INTO (ls_vendor_list-bukrs,ls_vendor_list-zsabe) FROM lfb1 WHERE lifnr EQ ls_vendor_list-lifnr AND bukrs IN s_bukrs. IF sy-subrc NE 0. DELETE lt_vendor_list. ELSE. MODIFY lt_vendor_list FROM ls_vendor_list. * SELECT SINGLE ekorg lfabc INTO (ls_vendor_list-ekorg, ls_vendor_list-lfabc) FROM lfm1 WHERE lifnr EQ ls_vendor_list-lifnr AND ekorg IN s_ekorg. IF sy-subrc NE 0. DELETE lt_vendor_list. ELSE. * SELECT SINGLE smtp_addr FROM adr6 INTO ls_vendor_list-email WHERE addrnumber = ls_vendor_list-adrnr. MODIFY lt_vendor_list FROM ls_vendor_list. * ENDIF. ENDIF. ENDLOOP. END-OF-SELECTION. * * Map the importance radio-button * IF p_im_l IS NOT INITIAL. lv_importance = '0'. ELSEIF p_im_n IS NOT INITIAL. lv_importance = '1'. ELSE. lv_importance = '2'. ENDIF. * LOOP AT lt_vendor_list INTO ls_vendor_list WHERE email IS NOT INITIAL. * Fill recipient * CLEAR lt_rec_email. ls_rec_email-email = ls_vendor_list-email. ls_rec_email-type = '1'. APPEND ls_rec_email TO lt_rec_email. * Fill communication language. IF ls_vendor_list-spras IS INITIAL. ls_vendor_list-spras = p_elang. ENDIF. * Fill Floe variables. CALL METHOD /floe/core=>get_data_from_structure EXPORTING im_structure = ls_vendor_list IMPORTING ex_vars = lt_vars. * * Invoke Floe * CALL FUNCTION '/FLOE/EMAIL_OUT' EXPORTING im_etype = p_etype im_elang = ls_vendor_list-spras im_document = p_doc im_rec_emails = lt_rec_email im_variables = lt_vars im_send_immediately = p_send im_importance = lv_importance IMPORTING ex_subrc = lv_subrc ex_mess = lt_mess ex_eid = lv_eid. * * Report result * FORMAT INTENSIFIED OFF. IF lv_subrc IS INITIAL. * CONCATENATE: 'Email'(010) lv_eid 'successfully sent to'(012) ls_rec_email-email INTO lv_message SEPARATED BY space. APPEND lv_message TO lt_suc_mess. * ELSE. * IF lv_error IS INITIAL. SKIP 1. WRITE:/ 'The following errors occured:'(013). ULINE. ENDIF. * lv_error = 'X'. CONCATENATE: 'Error while sending email to'(011) ls_rec_email-email INTO lv_message SEPARATED BY space. WRITE:/ lv_message. * IF lt_mess IS NOT INITIAL. * FORMAT INTENSIFIED ON. WRITE:/ 'Type'(004), 'Message'(005). FORMAT INTENSIFIED OFF. LOOP AT lt_mess INTO ls_mess. WRITE:/ ls_mess-type UNDER text-004, ls_mess-message UNDER text-005. ENDLOOP. * ENDIF. SKIP 1. ENDIF. * ENDLOOP. * IF lt_suc_mess IS NOT INITIAL. * SKIP 1. WRITE:/ 'The following emails were successfully sent:'(014). ULINE. * LOOP AT lt_suc_mess INTO lv_message. WRITE:/ lv_message. ENDLOOP. * ENDIF. SKIP 1. LOOP AT lt_vendor_list INTO ls_vendor_list WHERE email IS INITIAL. WRITE:/ 'No email address found for vendor ', ls_vendor_list-lifnr. ENDLOOP.