SRM-订单创建修改后发送邮件增强

订单创建修改发送后邮件增强

增强方式:隐式增强
增强函数: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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值