sap 收货后系统怎么设置自动发送邮件给申请人

国内MIGO 国外VL32N 收货后系统如何 设置邮件自动发送给物料申请人
2025-03-20 07:41:56
推荐回答(1个)
回答1:

我在项目上做过类似的。

 

首先要做的是物料主数据中 找个字段记录一下物料申请人 邮箱

 

以MIGO为例

 

首先需要 BASIS做SAP 相应邮件的配置

 

用Badi:MB_MIGO_BADI增强 interface:POST_DOCUMENT

 

 

 

 

发邮件FM代码如下

FUNCTION Z02FI_SEND_EMAIL_ALL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(I_ADDR) TYPE  ADR6-SMTP_ADDR
*"     REFERENCE(I_TITLE) TYPE  SO_REC_EXT
*"  EXPORTING
*"     REFERENCE(E_STATUS) TYPE  STRING
*"     REFERENCE(E_OK) TYPE  FLAG
*"  TABLES
*"      T_BODY STRUCTURE  W3HTML
*"      T_CCADDR STRUCTURE  ZCCADDR OPTIONAL
*"----------------------------------------------------------------------

  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.

  DATA RECIPIENTCC LIKE RECIPIENT.
  DATA L_ADDR LIKE I_ADDR.

  LV_TITLE = I_TITLE.


  WA_HTML-LINE  = ''.
  APPEND WA_HTML TO HTML.

  WA_HTML-LINE  = ''.
  APPEND WA_HTML TO HTML.

  LOOP AT T_BODY.
    WA_HTML-LINE  = T_BODY-LINE.
    APPEND WA_HTML TO HTML.
    WA_HTML-LINE  = '
'.
    APPEND WA_HTML TO HTML.
  ENDLOOP.

  WA_HTML-LINE  = '
'.
  APPEND WA_HTML TO HTML.

  WA_HTML-LINE  = ''.
  APPEND WA_HTML TO HTML.

  WA_HTML-LINE  = ''.
  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 ).

*   Construct sender and receiver
      CLEAR: SENDER_ID , RECIPIENT .
*    sender_id = cl_cam_address_bcs=>create_internet_address( 'TESTDELOITTE@PETROCHINA-HFY.COM' ).
      RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( I_ADDR ).

*   Set sender
      CALL METHOD SEND_REQUEST->SET_SENDER
        EXPORTING
          I_SENDER = SENDER_ID.

*   Add recipient with its respective attributes to send request
      CALL METHOD SEND_REQUEST->ADD_RECIPIENT
        EXPORTING
          I_RECIPIENT = RECIPIENT
          I_EXPRESS   = 'X'.




      LOOP AT T_CCADDR WHERE CCADDR IS NOT INITIAL .
        CLEAR RECIPIENTCC.
        RECIPIENTCC = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( T_CCADDR-CCADDR ).
        CALL METHOD SEND_REQUEST->ADD_RECIPIENT
          EXPORTING
            I_RECIPIENT = RECIPIENTCC
            I_COPY      = 'X'
            I_EXPRESS   = 'X'.
      ENDLOOP.


*   Set E-mail sending options
      CALL METHOD SEND_REQUEST->SET_STATUS_ATTRIBUTES
        EXPORTING
          I_REQUESTED_STATUS = 'E'
          I_STATUS_MAIL      = 'E'.
      CALL METHOD SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ).



*   Send document
      CALL METHOD SEND_REQUEST->SEND(
        EXPORTING
          I_WITH_ERROR_SCREEN = 'X'
        RECEIVING
          RESULT              = SENT_TO_ALL ).

      IF SENT_TO_ALL = 'X'.
*        E_STATUS = 'Email is send out successful.'.
        E_OK = 'X'.
      ENDIF.
      COMMIT WORK.

    CATCH CX_BCS INTO BCS_EXCEPTION.
      BCS_MESSAGE = BCS_EXCEPTION->GET_TEXT( ).
      E_STATUS = BCS_MESSAGE.
      EXIT.
  ENDTRY.



ENDFUNCTION.