Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

https://blogs.sap.

com/2012/12/05/send-multiple-smart-forms-as-pdf-attachments-
using-clbcs-class/

*&---------------------------------------------------------------------*
*& Form send_email
*&---------------------------------------------------------------------*
FORM send_email USING p_table TYPE t_ty_zman.

CONSTANTS: lv_newline TYPE c VALUE cl_abap_char_utilities=>newline,


lv_separator TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.

FIELD-SYMBOLS : <ls_table> LIKE zmanexp,


<ls_field> TYPE any.

DATA: lv_send_request TYPE REF TO cl_bcs,


lv_document TYPE REF TO cl_document_bcs,
lv_sender TYPE REF TO if_sender_bcs,
lv_recipient TYPE REF TO if_recipient_bcs,
gr_bcs_exception TYPE REF TO cx_bcs,
lt_message_body TYPE bcsy_text,
lx_document_bcs TYPE REF TO cx_document_bcs,
lv_sent_to_all TYPE os_boolean,
lv_contentexcel TYPE solix_tab,
lt_emailaddress TYPE TABLE OF ty_emailaddress,
ls_emailaddress TYPE ty_emailaddress,
lt_descr TYPE ty_descr OCCURS 0 WITH HEADER LINE,
lv_string TYPE string,
lv_data_string TYPE string,
lv_xstring TYPE xstring,
lv_header_excel TYPE string,
lv_zprogr(20) TYPE c,
lv_stk_azi(20) TYPE c,
lv_eisbe(20) TYPE c,
lv_menge(20) TYPE c,
lv_dispo(20) TYPE c,
lv_ze_insme(20) TYPE c,
lv_ze_plifz(20) TYPE c,
lv_descr TYPE dd04v,
lv_descrlabst TYPE string,
lv_descdtaw TYPE string,
lv_data_w(15) TYPE c,
lv_ze_datar(15) TYPE c,
lv_ze_lfdat(15) TYPE c,
lv_ze_dataw(15) TYPE c,
lv_mesg TYPE string,
lv_text TYPE string.

SELECT werks ad_smtpadr


INTO CORRESPONDING FIELDS OF TABLE lt_emailaddress
FROM zmanmail
WHERE werks IN so_werks
AND zmail EQ 'X'.
IF lt_emailaddress IS NOT INITIAL.

CLEAR: lv_string,
lv_data_string.

PERFORM get_description USING lt_descr CHANGING lv_header_excel.

LOOP AT lt_emailaddress INTO ls_emailaddress .

CLEAR: lv_data_string,
lv_string.

CONCATENATE lv_header_excel lv_data_string INTO lv_data_string.

LOOP AT p_table ASSIGNING <ls_table> WHERE werks EQ ls_emailaddress-werks..

WRITE: <ls_table>-zprogr TO lv_zprogr,


<ls_table>-stk_azi TO lv_stk_azi,
<ls_table>-eisbe TO lv_eisbe,
<ls_table>-menge TO lv_menge,
<ls_table>-dispo TO lv_dispo,
<ls_table>-ze_insme TO lv_ze_insme,
<ls_table>-ze_plifz TO lv_ze_plifz.

CLEAR lv_text.

CONCATENATE '=' '"' <ls_table>-doc '"' INTO lv_text.

PERFORM format_data USING <ls_table>-data_w


CHANGING lv_data_w.

PERFORM format_data USING <ls_table>-ze_datar


CHANGING lv_ze_datar.

PERFORM format_data USING <ls_table>-ze_lfdat


CHANGING lv_ze_lfdat.

PERFORM format_data USING <ls_table>-ze_dataw


CHANGING lv_ze_dataw.

CONCATENATE <ls_table>-werks <ls_table>-matnr lv_zprogr <ls_table>-maktx


lv_stk_azi lv_eisbe <ls_table>-tparte
lv_text <ls_table>-pos lv_menge <ls_table>-meins <ls_table>-
type_d lv_data_w <ls_table>-lifnr
lv_dispo <ls_table>-disp_tot <ls_table>-statusp <ls_table>-
dispo_2 lv_ze_insme lv_ze_plifz
lv_ze_datar lv_ze_lfdat lv_ze_dataw <ls_table>-z_matnr
<ls_table>-z_dispo INTO lv_string SEPARATED BY lv_separator.

CONCATENATE lv_data_string lv_string INTO lv_data_string SEPARATED BY


lv_newline.

ENDLOOP.

CALL FUNCTION 'SCMS_STRING_TO_XSTRING'


EXPORTING
text = lv_data_string
* MIMETYPE = ' '
* ENCODING =
IMPORTING
buffer = lv_xstring
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.

TRY.

lv_send_request = cl_bcs=>create_persistent( ).
lv_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = lt_message_body
i_subject = 'Missing Parts Report' ).
lv_contentexcel = cl_document_bcs=>xstring_to_solix( lv_xstring ).

TRY.
lv_document->add_attachment(
EXPORTING
i_attachment_type = 'XLS'
i_attachment_subject = 'Missing Parts Report'
i_att_content_hex = lv_contentexcel ).

CATCH cx_document_bcs INTO lx_document_bcs.


ENDTRY.

lv_send_request->set_document( lv_document ).

lv_sender = cl_sapuser_bcs=>create( sy-uname ).

lv_send_request->set_sender( lv_sender ).

lv_recipient =
cl_cam_address_bcs=>create_internet_address( ls_emailaddress-ad_smtpadr ).

CALL METHOD lv_send_request->add_recipient


EXPORTING
i_recipient = lv_recipient
i_express = 'X'.

lv_send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = lv_sent_to_all ).

IF sy-subrc EQ 0.
CLEAR lv_mesg.
CONCATENATE text-005 ls_emailaddress-werks INTO lv_mesg SEPARATED BY
space.
MESSAGE lv_mesg TYPE 'I'.
ELSE.
CLEAR lv_mesg.
CONCATENATE text-006 ls_emailaddress-werks INTO lv_mesg SEPARATED BY
space.
MESSAGE lv_mesg TYPE 'I'.
ENDIF.

COMMIT WORK.

CATCH cx_bcs INTO gr_bcs_exception.


WRITE:
'Error!',
'Error type:',
gr_bcs_exception->error_type.
ENDTRY.

ENDLOOP.

ENDIF.

ENDFORM.

You might also like