订单创建修改发送后邮件增强
增强方式:隐式增强
增强函数:BBP_SUS_NOTIFICATION_SEND
邮件增强
iv_supplier:供应商
通过函数获取数据
CALL FUNCTION 'BBP_PD_SUSPO_GETDETAIL'
EXPORTING
i_guid = iv_docno
IMPORTING
e_header = e_header
TABLES
e_item = et_item.
通过iv_changepo判断是创建还是修改
IF iv_changepo IS NOT INITIAL .
"修改
ELSE.
"创建
ENDIF.
邮件格式HTML
对邮件中的变量进行替代,按照变量顺序,相同变量需要按照顺序append多次
IF ct_param[] IS INITIAL.
wa_param-name = '$$$ZWERKS_TXT$$$'.
wa_param-value = es_item-zwerks_txt.
CONDENSE wa_param-value.
APPEND wa_param TO ct_param.
wa_param-name = '$$$EBELN$$$'.
wa_param-value = e_header-src_object_id.
CONDENSE wa_param-value.
APPEND wa_param TO ct_param.
ENDIF.
参考代码
DATA lv_subject TYPE string.
DATA iv_subject TYPE so_obj_des.
DATA it_recipient TYPE bbpt_notification_recipient.
DATA is_recipient TYPE bbps_notification_recipient.
DATA iv_template TYPE w3objid.
DATA ct_param TYPE ztname_value.
DATA wa_param LIKE LINE OF ct_param.
DATA rv_mail TYPE ad_smtpadr.
DATA e_header TYPE bbp_pds_suspo_header_d.
DATA et_item TYPE STANDARD TABLE OF bbp_pds_suspo_item_d.
DATA es_item TYPE bbp_pds_suspo_item_d.
CLEAR: e_header,et_item.
CALL FUNCTION 'BBP_PD_SUSPO_GETDETAIL'
EXPORTING
i_guid = iv_docno
IMPORTING
e_header = e_header
TABLES
e_item = et_item.
READ TABLE et_item INTO es_item INDEX 1.
CONCATENATE gc_str1 es_item-zwerks_txt gc_str2 e_header-src_object_id gc_str3 INTO lv_subject. "主题
CONDENSE lv_subject NO-GAPS.
iv_subject = lv_subject.
IF ct_param[] IS INITIAL.
wa_param-name = '$$$ZWERKS_TXT$$$'.
wa_param-value = es_item-zwerks_txt.
CONDENSE wa_param-value.
APPEND wa_param TO ct_param.
wa_param-name = '$$$EBELN$$$'.
wa_param-value = e_header-src_object_id.
CONDENSE wa_param-value.
APPEND wa_param TO ct_param.
ENDIF.
CALL FUNCTION 'BUPA_ADDRESS_GET_DETAIL'
EXPORTING
iv_partner = iv_lifnr
TABLES
et_adsmtp = et_adsmtp.
"根据供应商编码获取邮箱
CLEAR: rv_mail.
CALL FUNCTION 'BUPA_ADDRESS_GET_DETAIL'
EXPORTING
iv_partner = iv_supplier
TABLES
et_adsmtp = et_adsmtp.
READ TABLE et_adsmtp INTO es_adsmtp WITH KEY std_no = 'X'.
IF sy-subrc NE 0.
READ TABLE et_adsmtp INTO es_adsmtp INDEX 1.
ENDIF.
rv_mail = es_adsmtp-e_mail.
is_recipient-smtp_addr = rv_mail.
APPEND is_recipient TO it_recipient.
iv_template = '模板名称'.
IF ct_param[] IS NOT INITIAL.
LOOP AT ct_param INTO wa_param.
CLEAR: ls_merge,ls_html,lt_html.
ls_merge-name = wa_param-name.
ls_merge-command = 'R'.
ls_html-line = wa_param-value.
APPEND ls_html TO lt_html.
ls_merge-html = lt_html.
APPEND ls_merge TO lt_merge .
ENDLOOP.
ENDIF.
CALL FUNCTION 'WWW_HTML_MERGER'
EXPORTING
template = template
IMPORTING
html_table = html_table
CHANGING
merge_table = lt_merge
EXCEPTIONS
template_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* ev_message_text = '未发现邮件模板,请检查'.
ev_message_text = lv_msg.
RAISE template_not_found.
ENDIF.
TRY.
*1)create send_request 创建发送请求
l_send_request = cl_bcs=>create_persistent( ).
*2)Creating Document 创建&设置附件
l_document = cl_document_bcs=>create_document(
i_type = 'HTM'
i_text = html_table
i_importance = '5'
i_sensitivity = 'O'
i_subject = subject ).
CALL METHOD l_send_request->set_document( l_document ).
*3) Get Sender Object 创建*设置发送方
IF sender IS INITIAL.
l_uname = sy-uname.
ELSE.
l_uname = sender .
ENDIF.
l_sender = cl_sapuser_bcs=>create( l_uname ).
CALL METHOD l_send_request->set_sender
EXPORTING
i_sender = l_sender.
*4) E-Mail “加载接收方
DATA ls_recipient TYPE bbps_notification_recipient.
LOOP AT it_recipient INTO ls_recipient.
TRANSLATE ls_recipient-smtp_addr TO LOWER CASE.
l_recipient = cl_cam_address_bcs=>create_internet_address(
ls_recipient-smtp_addr ).
CALL METHOD l_send_request->add_recipient
EXPORTING
i_recipient = l_recipient
i_express = 'U'
i_copy = 'X'
i_blind_copy = 'X'
i_no_forward = ' '.
CLEAR ls_recipient.
ENDLOOP.
*5)Trigger E-Mail immediately 触发邮件发送
l_send_request->set_send_immediately( 'X' ).
DATA v_status TYPE bcs_rqst VALUE 'E'.
*6)设置发送参数
l_send_request->set_status_attributes(
EXPORTING
i_requested_status = v_status
i_status_mail = v_status ).
CALL METHOD l_send_request->send( ).
COMMIT WORK.
CATCH cx_document_bcs INTO l_bcs_exception.
ev_message_text = l_bcs_exception->if_message~get_text( ).
CATCH cx_send_req_bcs INTO l_send_exception.
ev_message_text = l_send_exception->if_message~get_text( ).
CATCH cx_address_bcs INTO l_addr_exception.
ev_message_text = l_addr_exception->if_message~get_text( ).
ENDTRY.