提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
物流与采购部门不会去经常查看SAP中货物的在库时间所以导致经常有呆滞料的产生,为了解决这个问题,在SAP中开发库龄报表给用户查看,并且将马上呆滞的物料发送邮件给飞书
一、实现方式?
使用SAP的标准类CL_BCS进行邮件发送,网上有很多文章对这个类有详细的解读,在这就不在赘述
二、代码实现
在这里插入代码片 "获取发件人,收件人,抄送人的信息
SELECT
*
INTO TABLE @DATA(lt_mail_addr)
FROM
zmail
WHERE
zprogram = 'ZRMM003' AND
zactive = 'X'.
READ TABLE lt_mail_addr INTO DATA(ls_mail_addr) INDEX 1.
IF sy-subrc eq 0.
gv_receiver_addr = ls_mail_addr-ZRECEIVER. "收件人
gv_send_addr = ls_mail_addr-zsend. "发件人
gv_cc_addr = ls_mail_addr-zcc. "抄送人
ENDIF.
"获取附件
"调用其他程序获取附件内容
CALL METHOD cl_salv_bs_runtime_info=>set
EXPORTING
display = abap_false
metadata = abap_false
data = abap_true.
"获取附件内容
SUBMIT zrmm002 AND RETURN.
TRY.
CALL METHOD cl_salv_bs_runtime_info=>get_data_ref
IMPORTING
r_data = go_data.
ASSIGN go_data->* TO <go_data>.
CATCH cx_salv_bs_sc_runtime_info .
MESSAGE '调用失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
MOVE-CORRESPONDING <go_data> TO gt_data.
"分割符 #
gv_tab = cl_bcs_convert=>gc_tab.
"字段描述
CONCATENATE gv_string
'零件号' gv_tab
'项目号' gv_tab
'中文描述' gv_tab
'英文描述' gv_tab
'供应商名称' gv_tab
'保质期' gv_tab
'采购周期' gv_tab
'类型' gv_tab
'保存温度' gv_tab
'保存湿度' gv_tab
'SQE' gv_tab
'备注' gv_crlf
INTO gv_string.
* "字段值
LOOP AT gt_data INTO gs_data.
DO 12 TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE gs_data TO <fs>.
IF <fs> IS ASSIGNED.
IF <fs> IS INITIAL.
<fs> = '空'.
ENDIF.
ENDIF.
ENDDO.
gv_ztemperature = gs_data-ztemperature.
gv_zhumidity = gs_data-zhumidity.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN gv_ztemperature WITH ''.
REPLACE ALL OCCURRENCES OF '"' IN gv_ztemperature WITH ''.
REPLACE ALL OCCURRENCES OF '"' IN gv_zhumidity WITH ''.
REPLACE ALL OCCURRENCES OF '(' IN gs_data WITH ''.
REPLACE ALL OCCURRENCES OF ')' IN gs_data WITH ''.
CONCATENATE gv_string
gs_data-zpartno gv_tab
gs_data-zproject gv_tab
gs_data-zchinese gv_tab
gs_data-zenglish gv_tab
gs_data-zsupplier gv_tab
gs_data-zvalidity gv_tab
gs_data-zleadtime gv_tab
gs_data-ztype gv_tab
gv_ztemperature gv_tab
gv_zhumidity gv_tab
gs_data-zsqe gv_tab
gs_data-zremarks gv_crlf
INTO gv_string.
CLEAR:gs_data,
gv_ztemperature,
gv_zhumidity.
ENDLOOP.
TRY.
cl_bcs_convert=>string_to_solix(
EXPORTING
iv_string = gv_string
iv_codepage = '4103' "suitable for MS Excel, leave empty
iv_add_bom = 'X' "for other doc types
IMPORTING
et_solix = gt_mailhex
ev_size = gv_size ).
"邮件正文
gv_documnet = '库存到期提醒邮件,系统自动发送请勿回复,附件为到期零件数据,有问题请联系相关部门,谢谢!'.
APPEND gv_documnet TO gt_contents.
gv_length = gv_size.
"创建文档连接
go_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_subject = '库存到期邮件提醒'
i_length = gv_length
i_language = sy-langu
i_importance = '1'
i_text = gt_contents
).
gv_subject = '库存到期邮件提醒.XLSX'.
"添加附件
CALL METHOD go_document->add_attachment
EXPORTING
* I_ATTACHMENT_TYPE = 'BIN'
i_attachment_type = 'XLS'
i_attachment_subject = gv_subject
i_attachment_size = gv_size
i_att_content_hex = gt_mailhex.
"持续发送请求
go_request = cl_bcs=>create_persistent( ).
"发件人
go_sender = cl_sapuser_bcs=>create( gv_send_addr ).
go_request->set_sender( go_sender ).
"收件人
go_bcs_receiver = cl_cam_address_bcs=>create_internet_address( gv_receiver_addr ).
"添加收件人
CALL METHOD go_request->add_recipient
EXPORTING
i_recipient = go_bcs_receiver.
"抄送人
go_bcs_cc = cl_cam_address_bcs=>create_internet_address( gv_cc_addr ).
"添加抄送人
CALL METHOD go_request->add_recipient
EXPORTING
i_recipient = go_bcs_cc
i_copy = 'X'.
"发送邮件
go_request->set_send_immediately( 'X' )."设置立即发送
CALL METHOD go_request->set_document( go_document ).
CALL METHOD go_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = gv_result ).
COMMIT WORK.
CATCH cx_bcs INTO go_fail.
ENDTRY.
三、注意事项
1.应用服务器的hosts文件设置IP与域名的映射关系
2.添加附件时注意特殊符号的影响
总结
这是我第一做关于SAP的邮件功能,对SAP的邮件功能有了一定的了解!