DATA: fm_name TYPE rs38l_fnam.
DATA: gwa_result TYPE ssfcrescl,
gwa_output TYPE ssfcompop,
gwa_control TYPE ssfctrlop.
DATA: ls_head TYPE zmms010, "定义表头内表
lt_item TYPE TABLE OF zmms010 WITH HEADER LINE. "定义表值内表
DATA: gv_size TYPE i.
DATA: gz_lines TYPE TABLE OF tline.
DATA: gs_lines TYPE solix_tab .
DATA:lv_xstring TYPE xstring. "pdf附件
DATA: lo_bcs TYPE REF TO cl_bcs,
lo_doc_bcs TYPE REF TO cl_document_bcs,
l_sender TYPE REF TO cl_sapuser_bcs,
l_send_result TYPE os_boolean,
l_subject TYPE so_obj_des.
DATA: lo_recipient TYPE REF TO if_recipient_bcs. "收件人
DATA: l_to TYPE adr6-smtp_addr."收件人地址
DATA: l_file_size_char TYPE so_obj_len.
DATA: lt_solisti1 TYPE soli_tab , "定义邮件内容
ls_solisti1 TYPE soli.
DATA : lo_mime_helper TYPE REF TO cl_gbt_multirelated_service.
CREATE OBJECT lo_doc_bcs.
* 邮件标题
l_subject = '邮件标题'.
* 邮件正文
ls_solisti1 = '<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xfa="http://www.xfa.org/schema/xfa-template/2.1/"> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8"></head>'.
APPEND ls_solisti1 TO lt_solisti1.
ls_solisti1 = '<BODY>'.
APPEND ls_solisti1 TO lt_solisti1.
CLEAR ls_solisti1.
ls_solisti1 = '<SPAN style="font-family:Calibri;font-size:小四;">'.
APPEND ls_solisti1 TO lt_solisti1.
CONCATENATE '备注:' '<BR><BR>' INTO ls_solisti1.
APPEND ls_solisti1 TO lt_solisti1.
CONCATENATE '重要提示:此邮件及附件具有保密性质,包含商业秘密,受法律保护不得泄露.' '<BR><BR>' INTO ls_solisti1.
APPEND ls_solisti1 TO lt_solisti1.
CLEAR ls_solisti1.
ls_solisti1 ='</SPAN>'.
APPEND ls_solisti1 TO lt_solisti1.
*CREATE THE DOCUMENT WITH CONTENTS
CREATE OBJECT lo_mime_helper.
CALL METHOD lo_mime_helper->set_main_html
EXPORTING
content = lt_solisti1
description = 'Automatic payment'. "title
lo_doc_bcs = cl_document_bcs=>create_from_multirelated( i_subject = l_subject i_multirel_service = lo_mime_helper i_language = sy-langu i_importance = '1' ).
"附件PDF参数
gwa_control-no_dialog = 'X'.
gwa_control-no_close = ' '.
gwa_control-preview = ' '.
gwa_control-getotf = 'X'.
gwa_control-langu = sy-langu.
gwa_output-tdnewid = 'X'.
gwa_output-tdimmed = 'X'.
gwa_output-tddelete = 'X'.
gwa_output-tddest = 'LP01'.
"调用smartforms
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'SMARTFORMS'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
"smartforms数据处理
LOOP AT gt_table INTO gw_table WHERE sel EQ abap_true GROUP BY ( ebeln = gw_table-ebeln )."按订单分组
LOOP AT gt_table INTO gi_table WHERE ebeln EQ gw_table-ebeln .
MOVE-CORRESPONDING gi_table TO g_lt_item.
APPEND g_lt_item TO g_lt_item.
ENDLOOP.
CALL FUNCTION fm_name
EXPORTING
control_parameters = gwa_control
output_options = gwa_output
user_settings = ''
ls_head = ls_head
IMPORTING
job_output_info = gwa_result
TABLES
lt_item = lt_item ""传值进入smartforms
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*Convert OTF to PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = gv_size
bin_file = lv_xstring
TABLES
otf = gwa_result-otfdata
lines = gz_lines
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
"转换二进制
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xstring
TABLES
binary_tab = gs_lines.
* 附件长度
l_file_size_char = gv_size.
* 添加附件,可以添加多个附件
CALL METHOD lo_doc_bcs->add_attachment
EXPORTING
i_attachment_type = 'BIN'
i_attachment_subject = 'PO' && gw_zmmf010-ebeln && '.PDF'
i_attachment_size = l_file_size_char
i_att_content_hex = gs_lines.
ENDLOOP.
lo_bcs = cl_bcs=>create_persistent( ).
l_sender = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD lo_bcs->set_sender
EXPORTING
i_sender = l_sender.
DATA:lf_error TYPE REF TO cx_address_bcs.
"设置接收人\抄送人邮箱
IF gx_zmmf010-zzemail IS NOT INITIAL.
TRY.
l_to = '1234567@QQ.COM'."邮箱地址
lo_recipient = cl_cam_address_bcs=>create_internet_address( l_to ).
lo_bcs->add_recipient( i_recipient = lo_recipient
i_express = 'X'
i_copy = ' '"设置是否抄送
i_blind_copy = ' '
i_no_forward = ' ' ).
CATCH cx_address_bcs INTO lf_error .
MESSAGE '邮件地址异常!' TYPE 'I'.
RETURN.
ENDTRY.
ENDIF.
"提交邮件发送申请
lo_bcs->set_document( i_document = lo_doc_bcs ).
CALL METHOD lo_bcs->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = l_send_result
).
IF l_send_result = 'X'.
COMMIT WORK AND WAIT.
MESSAGE '邮件发送成功' TYPE 'S'.
CLEAR ls_modify_email.
ELSE.
ROLLBACK WORK.
MESSAGE '邮件发送失败' TYPE 'E'.
ENDIF.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.