SAP ABAP发送出货通知,并上传PDF附件发送邮件(CL_BCS,CL_DOCUMENT_BCS)

*主要用到了SAP的CL_BCS,CL_DOCUMENT_BCS这两个类实现
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IN_MAILS) TYPE  STRING
*"  TABLES
*"      IT_HEAD STRUCTURE  ZSEND_DN_HEAD
*"      IT_ITEM STRUCTURE  ZSEND_DN_ITEM
*"----------------------------------------------------------------------
DATA:
        EMAIL    TYPE STRING ,收件邮箱
        LT_MAILS TYPE TABLE OF STRING WITH HEADER LINE.多个接收邮箱

  DATA: FILENAME       TYPE STRING   ,文件路径
        LV_PDF_CONTENT TYPE SOLIX_TAB,存文件
        LV_CONLENGTHS  TYPE SO_OBJ_LEN,文件长度
        LEN            TYPE I,
        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.                                 "异常信息

设置文本内容

  READ TABLE IT_HEAD INDEX 1 .
  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>各位好!</h3>'.
  APPEND WA_HTML TO HTML.
  WA_HTML-LINE = '<h3>' && SY-DATUM+0(4) && '年' && SY-DATUM+4(2) && '月' && SY-DATUM+6(2) && '日' && 'XX事业部出货明细如下:</h3>'.
  APPEND WA_HTML TO HTML.
  WA_HTML-LINE = '<div style="margin-left: 20px;"><h4>' && '客户编号:'&& IT_HEAD-BU_SORT2  &&'</h4></div>'.
  APPEND WA_HTML TO HTML.
  WA_HTML-LINE = '<div style="margin-left: 20px;"><h4>' && '交易条款:'&& IT_HEAD-INCO1  &&'/' && IT_HEAD-INCO2 &&'</h4></div>'.
  APPEND WA_HTML TO HTML.
  WA_HTML-LINE = '<div style="margin-left: 20px;"><h4>' && '快递方式:'&& IT_HEAD-NAME_T &&'/' && IT_HEAD-ZSER_TYPE_T &&'</h4></div>'.
  APPEND WA_HTML TO HTML.
  WA_HTML-LINE = '<div style="margin-left: 20px;"><h4>' && '备注:'    && IT_HEAD-ZB     && '</h4></div>'.
  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>客户订单号</th>'&&'<th>客户料号</th>'&&'<th>SAP料号</th>'&&'<th>数量</th>'&&'</thead>'.
  APPEND WA_HTML TO HTML.
  WA_HTML-LINE = '<tbody><tr>'.
  APPEND WA_HTML TO HTML.
  LOOP AT IT_ITEM .
    WA_HTML-LINE = '<td>'&& IT_ITEM-VBELN &&'/'&& IT_ITEM-POSNR  &&'</td>'&&'<td>'&& IT_ITEM-ZJZ &&'</td>'&& '<td>'&& IT_ITEM-BSTKD &&'</td>'.
    WA_HTML-LINE = WA_HTML-LINE &&'<td>'&& IT_ITEM-KDMAT &&'</td>'&&'<td>'&& IT_ITEM-MATNR &&'</td>'&&'<td>'&& IT_ITEM-ZS &&'</td></tr>' .
  APPEND WA_HTML TO HTML.
  LV_TITLE = LV_TITLE && IT_ITEM-ZJZ .
  ENDLOOP .

  IF IT_HEAD-JC_T = '出口'.
    LV_TITLE = SY-DATUM &&'-'&& IT_HEAD-BU_SORT2 &&'-'&& LV_TITLE &&'-'&&'报关出货联络'.
  ELSE.
    LV_TITLE = SY-DATUM &&'-'&& IT_HEAD-BU_SORT2 &&'-'&& LV_TITLE &&'-'&&'出货联络'.
  ENDIF.
*  APPEND wa_html TO html.
  WA_HTML-LINE = '</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 ).
*邮箱拆分
    SPLIT IN_MAILS AT '|' INTO TABLE LT_MAILS.
    LOOP AT LT_MAILS INTO EMAIL .
    IF EMAIL IS INITIAL .
       CONTINUE.
    ENDIF.
*   收件人
    LV_TO = EMAIL. "邮箱地址 例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.
    IF SY-SUBRC = 0 .
      CALL METHOD SEND_REQUEST->ADD_RECIPIENT
      EXPORTING
        I_RECIPIENT = LO_BCS_TO.
    ENDIF.
    ENDLOOP .
*读取PDF内容
    FILENAME = IT_HEAD-PATH ."路径
    CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                = FILENAME
      FILETYPE                = 'BIN'
    IMPORTING
      FILELENGTH              = LEN
    TABLES
      DATA_TAB                = LV_PDF_CONTENT
    EXCEPTIONS
      OTHERS                  = 1.
* 添加PDF附件
    LV_CONLENGTHS = LEN .
    DOCUMENT->ADD_ATTACHMENT(
    I_ATTACHMENT_TYPE    = 'BIN'
    I_ATTACHMENT_SIZE    = LV_CONLENGTHS
    I_ATTACHMENT_SUBJECT = '附件.PDF'
    I_ATT_CONTENT_HEX    = LV_PDF_CONTENT
    ).
    "设置立即发送
    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.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值