• 邮件发送smartform(转成PDF)实例


    介绍一个项目中经常会遇到的场景:将smartform转化成PDF,然后再把PDF作为邮件的附件发送出去。

    1, 创建smartform

    Tcode:smartforms创建一个简单的smartform

    2017-02-23_10-48-08

    添加一个文本节点,

    2017-02-23_10-50-10

    2, 创建程序

    创建一个abap程序,简单逻辑如下:

    1,生成smartform保存到spool中,注意控制参数(control_parameters)和输出选项(output_options )的设定

    2,调用RSPO_GET_ATTRIBUTES_SPOOLJOB ()取得spool的属性

    3,将spool中smartform转换成PDF

    4,通过类cl_bcs将PDF作为附件发送邮件

    代码如下:其中有很多错误处理没有写,大家自己完善吧。。。

    REPORT ztest_smartform_mail.
    
    DATA: g_fm_name      TYPE rs38l_fnam.
    DATA: git_spoolids TYPE tsfspoolid,
          gwa_spool    TYPE rspoid.
    DATA: gwa_result     TYPE ssfcrescl,
          gwa_output     TYPE ssfcompop,
          g_filename     TYPE string,
          g_bin_filesize TYPE i,
          git_lines      TYPE STANDARD TABLE OF tline,
          gwa_control    TYPE ssfctrlop.
    
    * for mail
    DATA send_request  TYPE REF TO cl_bcs.
    DATA document      TYPE REF TO cl_document_bcs.
    DATA recipient     TYPE REF TO if_recipient_bcs.
    DATA bcs_exception TYPE REF TO cx_bcs.
    DATA sent_to_all   TYPE os_boolean.
    DATA pdf_size      TYPE so_obj_len.
    DATA pdf_content   TYPE solix_tab.
    DATA pdf_xstring   TYPE xstring.
    DATA:g_mailto      TYPE ad_smtpadr.
    
    DATA rq       TYPE tsp01.
    DATA bin_size TYPE i.
    DATA dummy    TYPE TABLE OF rspoattr.
    
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname           = 'ZTEST_PDF'
    *   VARIANT            = ' '
    *   DIRECT_CALL        = ' '
      IMPORTING
        fm_name            = g_fm_name
      EXCEPTIONS
        no_form            = 1
        no_function_module = 2
        OTHERS             = 3.
    IF sy-subrc <> 0.
    * Implement suitable error handling here
    ENDIF.
    gwa_control-no_dialog = 'X'.
    gwa_control-langu     = sy-langu.
    gwa_output-tdnewid   = 'X'.
    gwa_output-tdimmed   = ' '.
    gwa_output-tddelete  = ' '.
    
    CALL FUNCTION g_fm_name
      EXPORTING
        control_parameters = gwa_control
        output_options     = gwa_output
      IMPORTING
        job_output_info    = gwa_result
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.
    
    MOVE gwa_result-spoolids TO git_spoolids.
    
    * get mail address
    CALL FUNCTION 'EFG_GEN_GET_USER_EMAIL'
      EXPORTING
        i_uname           = sy-uname
      IMPORTING
        e_email_address   = g_mailto
      EXCEPTIONS
        not_qualified     = 1
        user_not_found    = 2
        address_not_found = 3
        OTHERS            = 4.
    IF sy-subrc <> 0.
    * Implement suitable error handling here
    ENDIF.
    
    LOOP AT git_spoolids INTO gwa_spool.
    *&---------------------------------------------------------------------*
    *& Create PDF
    *&---------------------------------------------------------------------*
    * Create PDF Content
    * 1) get attributes of spool request
    * 2) convert spool request to PDF dependent on document type
    *----------------------------------------------------------------------*
    *   ------------ get attributes of spool request ---------------------
      CALL FUNCTION 'RSPO_GET_ATTRIBUTES_SPOOLJOB'
        EXPORTING
          rqident     = gwa_spool
        IMPORTING
          rq          = rq
        TABLES
          attributes  = dummy
        EXCEPTIONS
          no_such_job = 1
          OTHERS      = 2.
      IF sy-subrc <> 0.
    *   error handling
        CONTINUE.
      ENDIF.
    
    *   --- convert spool request into PDF, dependent on document type ---
      IF rq-rqdoctype = 'OTF' OR rq-rqdoctype = 'SMART'.
        CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
          EXPORTING
            src_spoolid              = gwa_spool
            no_dialog                = 'X'
            pdf_destination          = 'X'
            no_background            = 'X'
          IMPORTING
            pdf_bytecount            = bin_size
            bin_file                 = pdf_xstring
          EXCEPTIONS
            err_no_otf_spooljob      = 1
            err_no_spooljob          = 2
            err_no_permission        = 3
            err_conv_not_possible    = 4
            err_bad_dstdevice        = 5
            user_cancelled           = 6
            err_spoolerror           = 7
            err_temseerror           = 8
            err_btcjob_open_failed   = 9
            err_btcjob_submit_failed = 10
            err_btcjob_close_failed  = 11
            OTHERS                   = 12.
        IF sy-subrc <> 0.
    *   error handling
          CONTINUE.
        ENDIF.
      ELSEIF rq-rqdoctype = 'LIST'.
        CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
          EXPORTING
            src_spoolid              = gwa_spool
            no_dialog                = 'X'
            pdf_destination          = 'X'
            no_background            = 'X'
          IMPORTING
            pdf_bytecount            = bin_size
            bin_file                 = pdf_xstring
          EXCEPTIONS
            err_no_abap_spooljob     = 1
            err_no_spooljob          = 2
            err_no_permission        = 3
            err_conv_not_possible    = 4
            err_bad_destdevice       = 5
            user_cancelled           = 6
            err_spoolerror           = 7
            err_temseerror           = 8
            err_btcjob_open_failed   = 9
            err_btcjob_submit_failed = 10
            err_btcjob_close_failed  = 11
            OTHERS                   = 12.
        IF sy-subrc <> 0.
    *   error handling
          CONTINUE.
        ENDIF.
      ELSE.
    *   error handling
        CONTINUE.
      ENDIF.
      pdf_size = bin_size.
    
    *&---------------------------------------------------------------------*
    *& Send mail
    *&---------------------------------------------------------------------*
    
      TRY.
    
    *     -------- create persistent send request ------------------------
          send_request = cl_bcs=>create_persistent( ).
    
    *     -------- create and set document -------------------------------
          pdf_content = cl_document_bcs=>xstring_to_solix( pdf_xstring ).
    
          document = cl_document_bcs=>create_document(
                i_type    = 'PDF'
                i_hex     = pdf_content
                i_length  = pdf_size
                i_subject = '邮件题目' ).                           "#EC NOTEXT
    
    *     add document object to send request
          send_request->set_document( document ).
    
    *     --------- add recipient (e-mail address) -----------------------
    
    *     create recipient object
          recipient = cl_cam_address_bcs=>create_internet_address( g_mailto ).
    
    *     add recipient object to send request
          send_request->add_recipient( recipient ).
    
    *     ---------- send document ---------------------------------------
          sent_to_all = send_request->send( i_with_error_screen = 'X' ).
    
          COMMIT WORK.
    
          IF sent_to_all IS INITIAL.
    *       error handling
            CONTINUE.
          ELSE.
            MESSAGE 'send mail successfully' TYPE 'S'.
          ENDIF.
    
    *   ------------ exception handling ----------------------------------
    *   replace this rudimentary exception handling with your own one !!!
        CATCH cx_bcs INTO bcs_exception.
    
      ENDTRY.
    
    ENDLOOP.

    运行后,邮件会暂时保存在SOST中,

    2017-02-23_14-38-16

    手动触发后会发送到邮箱里,也可以等待自动触发,具体等待多久要看SOST中的配置。

    收到的邮件就是下面这个样子。。

    2017-02-23_14-41-22

    打开PDF

    2017-02-23_14-42-42

    以上。

  • 相关阅读:
    Linux 守护进程一
    Linux 改进捕捉信号机制(sigaction,sigqueue)
    Linux 发送信号
    Linux 信号捕捉
    Heartbeat+DRBD+MFS高可用
    centos7 MFS drbd keepalived
    RabbitMQ-官方指南-RabbitMQ配置
    CentOS 7 单用户模式+救援模式
    CentOS6.8 x64+Nginx1.3.8/Apache-httpd 2.4.3+PHP5.4.8(php-fpm)+MySQL5.5.28+CoreSeek4.1源码编译安装
    nginx定制header返回信息模块ngx_headers_more
  • 原文地址:https://www.cnblogs.com/datie/p/11435799.html
Copyright © 2020-2023  润新知