业务背景:业务要求发送邮件的同时正文要带出表格
- 不涉及SAP模块业务,单纯就开发,直接上代码了。 TIPS:可以在TCODE SBWP查看发出去的邮件,如果有多个收件人或者抄送人 ,建个底表把员工邮箱存进去,在ABAP程序查询底表数据放到内表,LOOP 内表把邮箱地址放进去就可以了,真实开发数据不应该是写死的,在填充表格数据的时候也可以LOOP 要发送的数据内表 把写死的文字用变量替代就可以了。
DATA: lv_title TYPE so_obj_des,
send_request TYPE REF TO cl_bcs,
document TYPE REF TO cl_document_bcs,
conlengths TYPE so_obj_len,
html TYPE STANDARD TABLE OF w3html,
wa_html TYPE w3html,
sender_id TYPE REF TO if_sender_bcs,
recipient TYPE REF TO if_recipient_bcs,
sent_to_all TYPE os_boolean,
bcs_exception TYPE REF TO cx_bcs,
bcs_message TYPE string,
lo_sender TYPE REF TO cl_sapuser_bcs, "发送人
lv_to TYPE adr6-smtp_addr, "接收人
lo_bcs_to TYPE REF TO if_recipient_bcs, "接收人
lv_cc TYPE adr6-smtp_addr, "抄送人
lo_bcs_cc TYPE REF TO if_recipient_bcs, "抄送人
lv_result TYPE os_boolean, "发送结果
lo_fail TYPE REF TO cx_bcs. "异常信息
lv_title = '大仓多库位库存预警表'.
wa_html-line = '<html><head><meta charset="utf-8" /><title></title><style>table {text-align: center;}</style></head><body>'.
APPEND wa_html TO html.
wa_html-line = '<h3>为避免印单个SKU存放多库位交货时,产品不能按批次先进先出原则,导致存在呆滞风险,烦请仓库重点关注对产品'&&
'库位进行管控;单个SKU多库位存放的成品预警明细见附件:</h3>'.
APPEND wa_html TO html.
wa_html-line = '<table border="1" width="550px" height="150px" cellspacing="0" align="center">'.
APPEND wa_html TO html.
wa_html-line = '<thead><tr>'&&
'<th>装运点</th>'&&
'<th>数据获取时间</th>'&&
'<th>SKU总数</th>'&&
'<th>多库位SKU总数</th>'&&
'<th>多库位SKU占比</th>'&&
'<th>增长率</th>'&&
'</tr></thead>'.
APPEND wa_html TO html.
wa_html-line = '<tbody><tr>'&&
'<td >广州</td>'&&
'<td>2023/8/29</td>'&&
'<td>1134</td>'&&
'<td>180</td>'&&
'<td>25%</td>'&&
'<td>23%</td>'&&
'</tr>'&&
'<tr>'&&
'<td>深圳</td>'&&
'<td>2023/8/29</td>'&&
'<td>1134</td>'&&
'<td>180</td>'&&
'<td>25%</td>'&&
'<td>23%</td>'&&
'</tr></tbody>'.
APPEND wa_html TO html.
wa_html-line = ' </table>'.
APPEND wa_html TO html.
wa_html-line = '</body></html>'.
APPEND wa_html TO html.
TRY.
CLEAR send_request.
send_request = cl_bcs=>create_persistent( ).
CLEAR document .
document = cl_document_bcs=>create_document(
i_type = 'HTM'
i_text = html
i_length = conlengths
i_subject = lv_title ).
* Add document to send request
CALL METHOD send_request->set_document( document ).
* 发件人:前提是这个邮箱地址能发邮件,并且不需要密码
lo_sender = cl_sapuser_bcs=>create( sy-uname ).
send_request->set_sender( lo_sender ).
* 收件人
lv_to = ''. "邮箱地址 例163@qq.com
lo_bcs_to = cl_cam_address_bcs=>create_internet_address( lv_to ).
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = lo_bcs_to.
"设置立即发送
send_request->set_send_immediately( 'X' ).
"与outbox关联
send_request->send_request->set_link_to_outbox( 'X' ).
"发送邮件
CALL METHOD send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = lv_result ).
CATCH cx_bcs INTO bcs_exception.
bcs_message = bcs_exception->get_text( ).
MESSAGE bcs_exception TYPE 'E'.
EXIT.
ENDTRY.
IF lv_result EQ 'X'.
COMMIT WORK AND WAIT.
MESSAGE '邮件推送成功' TYPE 'S'.
ELSE.
ROLLBACK WORK.
MESSAGE '有邮件推送失败' TYPE 'S' DISPLAY LIKE 'W'.
ENDIF.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
RETURN.
ENDIF.