zoukankan      html  css  js  c++  java
  • BCS SET EMAIL

    FUNCTION zcrm_send_email.
    *"----------------------------------------------------------------------
    *"*"Local Interface:
    *"  IMPORTING
    *"     VALUE(IV_SUBJECT) TYPE  SO_OBJ_DES OPTIONAL
    *"     VALUE(IV_SENDER_EMAL) TYPE  ADR6-SMTP_ADDR OPTIONAL
    *"     VALUE(IV_SENDER_NAME) TYPE  ADR6-SMTP_ADDR OPTIONAL
    *"     VALUE(IV_COMMON_BODY1) TYPE  FLAG DEFAULT ABAP_TRUE
    *"     VALUE(IV_COMMON_BODY2) TYPE  FLAG DEFAULT ABAP_TRUE
    *"     VALUE(IV_EXCEL_AS_BODY) TYPE  FLAG OPTIONAL
    *"     VALUE(IV_EXCEL) TYPE  FLAG OPTIONAL
    *"     VALUE(IV_PDF) TYPE  FLAG OPTIONAL
    *"     VALUE(IT_TABLE) TYPE  ANY TABLE OPTIONAL
    *"  TABLES
    *"      IT_BODYS STRUCTURE  SOLISTI1 OPTIONAL
    *"      IT_RECIPIENTS_EMAIL STRUCTURE  BAPIADSMTP OPTIONAL
    *"      IT_CC_RECIPIENTS_EMAIL STRUCTURE  BAPIADSMTP OPTIONAL
    *"----------------------------------------------------------------------
      FIELD-SYMBOLS:
        <fs_comp>  TYPE abap_compdescr,
        <fs_value> TYPE any,
        <fs_line>  TYPE any,
        <fs_col>   TYPE any.
      DATA:
        gs_bapiadsmtp      TYPE bapiadsmtp,
        gr_cx_send_req_bcs TYPE REF TO cx_send_req_bcs,
        gv_os_boolean      TYPE os_boolean,
        gr_send_request    TYPE REF TO cl_bcs,
        gr_document        TYPE REF TO cl_document_bcs,
        gr_recipient       TYPE REF TO if_recipient_bcs,
        gr_bcs_exception   TYPE REF TO cx_bcs,
        gr_sender          TYPE REF TO if_sender_bcs.
    
      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.
    *IV_COMMON_BODY1-Begin
          IF iv_common_body1 = abap_true.
            gs_solisti1 = '<html><body>'.
            APPEND gs_solisti1 TO gt_solisti1.
          ENDIF.
    *IV_COMMON_BODY1-End
    
    *IT_BODYS
          IF it_bodys[] IS NOT INITIAL.
            APPEND LINES OF it_bodys TO gt_solisti1.
          ENDIF.
    *IT_TABLE 如果非空的话获取共用抬头数据
          REFRESH:gt_ddfields.
          IF it_table IS NOT INITIAL.
            LOOP AT it_table ASSIGNING <gs_line> .
              IF gt_ddfields[] IS INITIAL.
                gr_cl_abap_structdescr ?= cl_abap_typedescr=>describe_by_data( <gs_line> ).
    *表头
                IF gt_ddfields[] IS INITIAL.
                  CALL METHOD gr_cl_abap_structdescr->get_ddic_field_list
                    EXPORTING
                      p_langu      = sy-langu
                    RECEIVING
                      p_field_list = gt_ddfields
                    EXCEPTIONS
                      not_found    = 1
                      no_ddic_type = 2
                      OTHERS       = 3.
                  IF sy-subrc <> 0.
    *       Implement suitable error handling here
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDLOOP.
          ENDIF.
    *IV_EXCEL_AS_BODY
          IF iv_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.
    *IV_COMMON_BODY2-Begin
          IF iv_common_body2 = abap_true.
            gs_solisti1 = '<br>'.
            APPEND gs_solisti1 TO gt_solisti1.
            gs_solisti1 = '<br>'.
            APPEND gs_solisti1 TO gt_solisti1.
            gs_solisti1 = 'Hisense Service'.
            APPEND gs_solisti1 TO gt_solisti1.
            gs_solisti1 = '<br>'.
            APPEND gs_solisti1 TO gt_solisti1.
            gs_solisti1 = '0860 447 3673'.
            APPEND gs_solisti1 TO gt_solisti1.
            gs_solisti1 = '<br>'.
            APPEND gs_solisti1 TO gt_solisti1.
            gs_solisti1 = 'service@hisense.co.za'.
            APPEND gs_solisti1 TO gt_solisti1.
          ENDIF.
    *IV_COMMON_BODY2-End
          IF iv_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 = iv_subject ).
    
    *       Start program frm_set_mail_document-End
    
    *       Define Attachment frm_set_mail_attachment-Begin
          IF iv_excel = abap_true.
    ****EXCEL附加抬头
            CLEAR:gv_string,gv_lines,gv_number.
            DESCRIBE TABLE gt_ddfields LINES gv_lines.
            LOOP AT gt_ddfields INTO gs_ddfields.
              gv_number = gv_number + 1.
              IF gv_lines = gv_number.
                CONCATENATE gv_string  gs_ddfields-fieldtext gc_crlf INTO gv_string.
              ELSE.
                IF gv_string IS INITIAL.
                  CONCATENATE gs_ddfields-fieldtext gc_tab INTO gv_string.
                ELSE.
                  CONCATENATE gv_string  gs_ddfields-fieldtext gc_tab INTO gv_string.
                ENDIF.
              ENDIF.
            ENDLOOP.
    ****EXCEL附加内容
            LOOP AT it_table ASSIGNING <gs_line>.
              gr_cl_abap_structdescr ?= cl_abap_typedescr=>describe_by_data( <gs_line> ).
              CLEAR:gv_number.
              LOOP AT gr_cl_abap_structdescr->components ASSIGNING <fs_comp>.
                gv_number = gv_number + 1.
                ASSIGN <fs_comp>-name TO <fs_col>.
                ASSIGN COMPONENT <fs_col> OF STRUCTURE <gs_line> TO <gs_field>.
                WRITE <gs_field> TO gv_field.
                IF gv_lines = gv_number.
                  CONCATENATE gv_string gv_field gc_crlf INTO gv_string.
                ELSE.
                  CONCATENATE gv_string gv_field gc_tab INTO gv_string.
                ENDIF.
              ENDLOOP.
            ENDLOOP.
    * Convert string to xstring type
    * 'APPLICATION/MSEXCEL;charset=utf-16le'
            CLEAR:gv_xstring.
            CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
              EXPORTING
                text     = gv_string
                mimetype = gc_mimetype
              IMPORTING
                buffer   = gv_xstring
              EXCEPTIONS
                failed   = 1
                OTHERS   = 2.
    * Add the file header for utf-16le. .
            IF sy-subrc = 0.
              CONCATENATE cl_abap_char_utilities=>byte_order_mark_little
              gv_xstring INTO gv_xstring IN BYTE MODE.
            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    = 'XLS'""XXL XLS
            i_attachment_subject = iv_subject
            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 iv_sender_emal IS INITIAL.
            iv_sender_emal = iv_sender_name = 'service@hisense.co.za'.
          ENDIF.
          CALL METHOD cl_cam_address_bcs=>create_internet_address
            EXPORTING
              i_address_string = iv_sender_emal "'europe@hisense.com'
              i_address_name   = iv_sender_name "'europe@hisense.com'
            RECEIVING
              result           = gr_sender.
          CALL METHOD gr_send_request->set_sender
            EXPORTING
              i_sender = gr_sender.
    
    *       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  = 'airwolf_chen@163.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  = '744793323@qq.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.
  • 相关阅读:
    Unity资源打包学习笔记(一)、详解AssetBundle的流程
    Unity实现c#热更新方案探究(三)
    Unity实现c#热更新方案探究(二)
    Unity实现c#热更新方案探究(一)
    对C#热更新方案ILRuntime的探究
    Unity使用C++作为游戏逻辑脚本的研究(二)
    执行composer install/update 命令遇 "You are using an outdated version of Composer. Composer 2.0 is abo...
    php 安装xdebug进行调试(phpstorm)
    phpstudy如何设置Nginx伪静态
    JS正则表达式
  • 原文地址:https://www.cnblogs.com/sapSB/p/6422707.html
Copyright © 2011-2022 走看看