邮件

事物代码:ALRTCATDEF

通用函数:

FUNCTION zcrm_send_email_common.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IS_SEND_EMS) TYPE  ZSRVS_SEND_EMS OPTIONAL
*"     VALUE(IT_TABLE) TYPE  ANY TABLE OPTIONAL
*"     VALUE(IS_XSTRING) TYPE  XSTRING OPTIONAL
*"  TABLES
*"      IT_RECIPIENTS_EMAIL STRUCTURE  BAPIADSMTP OPTIONAL
*"      IT_CC_RECIPIENTS_EMAIL STRUCTURE  BAPIADSMTP OPTIONAL
*"      IT_SIGNATURE STRUCTURE  SOLISTI1 OPTIONAL
*"----------------------------------------------------------------------
  DATA:
    lv_title      TYPE  string,
    lv_short_text TYPE  string,
    lv_long_text  TYPE  string,
    lt_long_text  TYPE rcl_bag_tline,
    ls_long_text  TYPE tline,
    lt_short_text TYPE rcl_bag_tline,
    ls_short_text TYPE tline.
***说明:
*1.仅满足Alert 模版需求
*2.Email 内容包含:A。邮件抬头;B。邮件文本;C。Excel内容;D。签名;E。附件
  CLEAR:gv_so_obj_des.
***基于Alert获取Email Body内容-Begin
  CALL FUNCTION 'ZSRV_GET_ZSRVS_SEND_SMS'
    EXPORTING
      is_send_ems         = is_send_ems
      iv_salrtdcat        = is_send_ems-salrtdcat
    IMPORTING
      ev_title            = lv_title
      ev_short_text       = lv_short_text
      ev_long_text        = lv_long_text
      et_long_text        = lt_long_text
      et_short_text       = lt_short_text
    EXCEPTIONS
      alert_error         = 1
      alert_no_recipients = 2
      OTHERS              = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
  gv_so_obj_des = lv_title.
***基于Alert获取Email Body内容-End
  TRY.
*       create persistent send request ------------------------
      FREE gr_send_request.
      gr_send_request = cl_bcs=>create_persistent( ).
*       Start program frm_set_mail_document-Begin
      REFRESH:gt_solisti1.
*IS_SEND_EMS-COMMON_BODY1-Begin
      IF is_send_ems-common_body1 = abap_true.
        gs_solisti1 = '<html><body>'.
        APPEND gs_solisti1 TO gt_solisti1.
      ENDIF.
*IS_SEND_EMS-COMMON_BODY1-End

*lt_long_text
      IF lt_long_text[] IS NOT INITIAL.
        LOOP AT lt_long_text INTO ls_long_text.
          IF ls_long_text-tdline IS INITIAL.
            gs_solisti1 = '<br>'.
          ELSE.
            gs_solisti1 = ls_long_text-tdline.
          ENDIF.
          APPEND gs_solisti1 TO gt_solisti1.
        ENDLOOP.
      ENDIF.
*IT_TABLE 如果非空的话获取共用抬头数据
      REFRESH:gt_ddfields.
      IF it_table IS NOT INITIAL.
        CALL FUNCTION 'ZCRM_CONVERT_TABLE_INFO'
          EXPORTING
            it_table    = it_table
          CHANGING
            ct_ddfields = gt_ddfields.
      ENDIF.
*IS_SEND_EMS-EXCEL_AS_BODY
      IF is_send_ems-excel_as_body = abap_true.
        IF it_table IS NOT INITIAL.
          gs_solisti1 = '<table border="1">'.
          APPEND gs_solisti1 TO gt_solisti1.
          gs_solisti1 = '<tr>'.
          APPEND gs_solisti1 TO gt_solisti1.
* Excel抬头
          CLEAR:gs_solisti1.
          LOOP AT gt_ddfields INTO gs_ddfields.
            CLEAR:gs_solisti1.
*          IF gs_solisti1 IS INITIAL.
*            CONCATENATE '<td>' gs_ddfields-fieldtext '</td>' INTO gs_solisti1.
*          ELSE.
*            CONCATENATE gs_solisti1 '<td>' gs_ddfields-fieldtext '</td>' INTO gs_solisti1.
*          ENDIF.
            CONCATENATE '<td>' gs_ddfields-fieldtext '</td>' INTO gs_solisti1.
            APPEND gs_solisti1 TO gt_solisti1.
          ENDLOOP.
* Excel 数据
          LOOP AT it_table ASSIGNING <gs_line>.
*表内容
            gs_solisti1 = '<tr>'.
            APPEND gs_solisti1 TO gt_solisti1.
            LOOP AT gr_cl_abap_structdescr->components ASSIGNING <fs_comp>.
              CLEAR:gs_solisti1.
              ASSIGN <fs_comp>-name TO <fs_col>.
              ASSIGN COMPONENT <fs_col> OF STRUCTURE <gs_line> TO <gs_field>.
              WRITE <gs_field> TO gv_field.
              CONCATENATE '<td >' gv_field '</td> ' INTO gs_solisti1.
              APPEND gs_solisti1 TO gt_solisti1.
            ENDLOOP.
            gs_solisti1 = '</tr>'.
            APPEND gs_solisti1 TO gt_solisti1.
          ENDLOOP.
          gs_solisti1 = '</table>'.
          APPEND gs_solisti1 TO gt_solisti1.
        ENDIF.
      ENDIF.
*签名信息-Begin
      IF it_signature[] IS NOT INITIAL.
        APPEND LINES OF it_signature TO gt_solisti1.
      ENDIF.
*签名信息-End
      IF is_send_ems-common_body1 = abap_true.
        gs_solisti1 = '<br>'.
        APPEND gs_solisti1 TO gt_solisti1.
        gs_solisti1 = '</body></html>'.
        APPEND gs_solisti1 TO gt_solisti1.
      ENDIF.

      gr_document = cl_document_bcs=>create_document(
      i_type    = 'HTM'
      i_text    = gt_solisti1
      i_subject = gv_so_obj_des ).

*       Start program frm_set_mail_document-End

*       Define Attachment frm_set_mail_attachment-Begin
      IF is_send_ems-attachment_type IS NOT INITIAL.
        IF is_send_ems-attachment_type = 'XLS'
        OR is_send_ems-attachment_type = 'TXT'.
          CLEAR:gv_xstring.
          CALL FUNCTION 'ZCRM_CONVERT_TABLE_INFO'
            EXPORTING
              it_table    = it_table
              iv_xstring  = abap_true
            IMPORTING
              ev_xstring  = gv_xstring
            CHANGING
              ct_ddfields = gt_ddfields.
        ENDIF.
        IF is_send_ems-attachment_type = 'PDF'.
          CLEAR:gv_xstring.
          CALL FUNCTION 'ZSRV_PRINT_TO_PDF'
            EXPORTING
              iv_samrtform = is_send_ems-samrtform
              iv_object_id = is_send_ems-object_id
            IMPORTING
              file         = gv_xstring.
        ENDIF.
        IF IS_XSTRING IS NOT INITIAL.
          gv_xstring = IS_XSTRING.
        ENDIF.
        CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
          EXPORTING
            buffer     = gv_xstring
          TABLES
            binary_tab = gt_solix.

*Create attachment notification
        gr_document->add_attachment(
        i_attachment_type    = is_send_ems-attachment_type
        i_attachment_subject = gv_so_obj_des
        i_att_content_hex    = gt_solix ).
      ENDIF.

*add document object to send request
      TRY.
          gr_send_request->set_document( gr_document ).
        CATCH cx_send_req_bcs INTO gr_cx_send_req_bcs.
*      MESSAGE i605(sbcoms) .
*      pv_subrc = 4.
      ENDTRY.
*       Define Attachment frm_set_mail_attachment-End

*       Sender addess frm_set_sender-Begin
      IF is_send_ems-sender_email IS NOT INITIAL.
        CALL METHOD cl_cam_address_bcs=>create_internet_address
          EXPORTING
            i_address_string = is_send_ems-sender_email "'europe@hisense.com'
            i_address_name   = is_send_ems-sender_name "'europe@hisense.com'
          RECEIVING
            result           = gr_sender.
        CALL METHOD gr_send_request->set_sender
          EXPORTING
            i_sender = gr_sender.
      ENDIF.
*       Sender addess frm_set_sender-End
*       create receiver list frm_set_receiver_list-Begin
***收件人处理
      LOOP AT it_recipients_email INTO gs_bapiadsmtp.
        IF sy-uname = zcl_crm_attributes=>gc_chenguoguang.
          gs_bapiadsmtp-e_mail  = 'gjyx.abap3@hisense.com'.
        ENDIF.
        FREE gr_recipient.
        gr_recipient = cl_cam_address_bcs=>create_internet_address( gs_bapiadsmtp-e_mail ).
        gr_send_request->add_recipient( gr_recipient ).
      ENDLOOP.
***抄送人处理
      LOOP AT it_cc_recipients_email INTO gs_bapiadsmtp.
        IF sy-uname = zcl_crm_attributes=>gc_chenguoguang.
          gs_bapiadsmtp-e_mail  = 'gjyx.abap3@hisense.com'.
        ENDIF.
        FREE gr_recipient.
        gr_recipient = cl_cam_address_bcs=>create_internet_address( gs_bapiadsmtp-e_mail ).
        gr_send_request->add_recipient( EXPORTING i_copy = 'X'  i_recipient = gr_recipient ).
      ENDLOOP.
*       create receiver list frm_set_receiver_list-End
*       send mail
      gr_send_request->set_send_immediately( 'X' ).
      gv_os_boolean = gr_send_request->send( i_with_error_screen = '' ).
      COMMIT WORK AND WAIT.
    CATCH cx_bcs INTO gr_bcs_exception.
*      MESSAGE i865(so) WITH lo_bcs_exception->error_type.
  ENDTRY.


ENDFUNCTION.
  LS_ZSRVS_SEND_SMS-USER_DATUM = SY-DATUM.
  LS_ZSRVS_SEND_SMS-SALRTDCAT = 'ZCRM_SRV0012'.
  LS_ZSRVS_SEND_SMS-SENDER_EMAIL = GS_ZCRMT_MAINT_I-VALUE2 ."'service123@hisense.co.za'.
  LS_ZSRVS_SEND_SMS-SENDER_NAME = GS_ZCRMT_MAINT_I-VALUE2 ."'service133@hisense.co.za'.
  LS_ZSRVS_SEND_SMS-COMMON_BODY1 = ABAP_TRUE.
  LS_ZSRVS_SEND_SMS-EXCEL_AS_BODY = ABAP_FALSE.

  LS_ZSRVS_SEND_SMS-ATTACHMENT_TYPE = 'XLS'.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT  = GW_ROOT-OBJECT_ID
    IMPORTING
      OUTPUT = LS_ZSRVS_SEND_SMS-OBJECT_ID.
*  LS_ZSRVS_SEND_SMS-OBJECT_ID = '0210001600'.
  WHILE GS_ZCRMT_MAINT_I-VALUE1 IS NOT INITIAL.
    SPLIT GS_ZCRMT_MAINT_I-VALUE1 at ' ' INTO LS_RECIPIENTS_EMAIL-E_MAIL GS_ZCRMT_MAINT_I-VALUE1.
    APPEND LS_RECIPIENTS_EMAIL TO LT_RECIPIENTS_EMAIL.
  ENDWHILE.
*  LS_RECIPIENTS_EMAIL-E_MAIL = GS_ZCRMT_MAINT_I-VALUE1 ."'gjyx.abap4@hisense.com'.
*  APPEND LS_RECIPIENTS_EMAIL TO LT_RECIPIENTS_EMAIL.
  WHILE GS_ZCRMT_MAINT_I-VALUE3 IS NOT INITIAL.
    SPLIT GS_ZCRMT_MAINT_I-VALUE3 at ' ' INTO LS_CC_RECIPIENTS_EMAIL-E_MAIL GS_ZCRMT_MAINT_I-VALUE3.
    APPEND LS_CC_RECIPIENTS_EMAIL TO LT_CC_RECIPIENTS_EMAIL.
  ENDWHILE.
*  IF GS_ZCRMT_MAINT_I-VALUE3 IS NOT INITIAL.
*    LS_CC_RECIPIENTS_EMAIL-E_MAIL = GS_ZCRMT_MAINT_I-VALUE3.
*    APPEND LS_CC_RECIPIENTS_EMAIL TO LT_CC_RECIPIENTS_EMAIL.
*  ENDIF.

  CALL FUNCTION 'ZCRM_SEND_EMAIL_COMMON'
    EXPORTING
      IS_SEND_EMS            = LS_ZSRVS_SEND_SMS
      IS_XSTRING             = GV_ATTAC
    TABLES
      IT_RECIPIENTS_EMAIL    = LT_RECIPIENTS_EMAIL
      IT_CC_RECIPIENTS_EMAIL = LT_CC_RECIPIENTS_EMAIL.
原文地址:https://www.cnblogs.com/sapSB/p/6651280.html