ABAP SmartForm转PDF并发送邮件

  "打印参数
  DATA: lv_form    TYPE tdsfname VALUE 'ZMM_SF_POPRINT',
        lv_fmname  TYPE rs38l_fnam,
        ls_ctrlop  TYPE ssfctrlop,
        ls_compop  TYPE ssfcompop,
        ls_jobinfo TYPE ssfcrescl,
        ls_info    TYPE ssfcrescl,
        ls_options TYPE ssfcresop.
*        lt_output  TYPE TABLE OF zfis006.
  "附件参数
  DATA: lt_otf    TYPE TABLE OF itcoo,
        lt_tline  TYPE TABLE OF tline,
        lt_record TYPE TABLE OF solisti1,
        ls_otf    TYPE itcoo,
        ls_tline  TYPE tline,
        ls_record TYPE solisti1.
  "邮件参数
  DATA: lv_size      TYPE i, "邮件附件大小
        lv_lines_txt TYPE i, "邮件文本行数
        lv_lines_bin TYPE i, "邮件附件行数
        lv_benfile   TYPE xstring,
        lv_object    TYPE char50, "邮件主题
        lv_pdfname   TYPE char50,
        lt_objpack   TYPE TABLE OF sopcklsti1 , "邮件内容 正文+附件
        lt_objtxt    TYPE TABLE OF solisti1   , "正文内容
        lt_objbin    TYPE TABLE OF solisti1   , "附件内容
        lt_reclist   TYPE TABLE OF somlreci1  , "收件人
        ls_doc_chng  TYPE sodocchgi1, "邮件属性
        ls_objpack   TYPE sopcklsti1,
        ls_objtxt    TYPE solisti1,
        ls_objbin    TYPE solisti1,
        ls_reclist   TYPE somlreci1.

*&---打印Smartform
        "打印控制
        ls_ctrlop-getotf = 'X'.
        ls_ctrlop-no_dialog = 'X'.
        ls_compop-tddest   = 'LP01'.      "指定打印机
*        ls_compop-tdnoprev = 'X'.

        CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
          EXPORTING
            formname = lv_form
          IMPORTING
            fm_name  = lv_fmname.

        CALL FUNCTION lv_fmname
          EXPORTING
            output_options     = ls_compop
            control_parameters = ls_ctrlop
            user_settings      = ' '
            gs_data            = ls_form_header
          IMPORTING
            job_output_info    = ls_jobinfo
          TABLES
            gt_data            = lt_form_item.

*&---转pdf
        CALL FUNCTION 'CONVERT_OTF'
          EXPORTING
            format       = 'PDF'
            pdf_username = 'TIANCZ'
          IMPORTING
            bin_filesize = lv_size
            bin_file     = lv_benfile
          TABLES
            otf          = ls_jobinfo-otfdata[]
            lines        = lt_tline.

        IF lv_benfile IS NOT INITIAL.
          CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
            EXPORTING
              buffer        = lv_benfile
            IMPORTING
              output_length = lv_size
            TABLES
              binary_tab    = lt_record.
        ENDIF.

        REFRESH:lt_reclist,lt_objtxt,lt_objbin,lt_objpack.
        CLEAR: ls_doc_chng.
        "将转换后的文件添加到邮件附件
        APPEND LINES OF lt_record TO lt_objbin.

*  &---邮件处理

        " 获取收件人
        SELECT SINGLE
          adsmtp
        FROM zmmt016
        WHERE
          bname = @ls_form_header-ernam
        INTO @DATA(lv_receiver).

        "添加邮件正文
        ls_objtxt = TEXT-m22. " 采购订单审批通过,请查收附件
        APPEND ls_objtxt TO lt_objtxt.

        "邮件正文行数
        lv_lines_txt = lines( lt_objtxt ).
        lv_object = is_input-ebeln && TEXT-m21. " 采购订单审批通过
        lv_pdfname = 'xxx.pdf'.	" 附件PDF命名
        ls_doc_chng-obj_langu = sy-langu.
        ls_doc_chng-obj_name = TEXT-t05.	" Email
*        ls_doc_chng-expiry_dat = sy-datum + 10.  " 邮件过期日,在此日期后邮件将无法被查看
        ls_doc_chng-obj_descr = lv_object.  "邮件标题
*        ls_doc_chng-sensitivty = 'F'.  " 邮件保密等级
        ls_doc_chng-doc_size = lv_lines_txt * 255 + lv_size.
        ls_doc_chng-priority = '3'. " 1:低优先级 3:普通优先级 5:高优先级

        CLEAR ls_objpack-transf_bin.
        ls_objpack-head_start = 1.
        ls_objpack-head_num = 0.
        ls_objpack-body_start = 1.
        ls_objpack-body_num = lv_lines_txt.
        ls_objpack-doc_type = 'RAW'.
        APPEND ls_objpack TO lt_objpack.

        CLEAR:lv_lines_bin.
        ls_objpack-transf_bin = 'X'.
        ls_objpack-head_start = 1.
        ls_objpack-head_num = 1.
        ls_objpack-body_start = 1.

        lv_lines_bin = lines( lt_record ).

        ls_objpack-doc_size = lv_size .
        ls_objpack-body_num = lv_lines_bin.
        ls_objpack-doc_type = 'PDF'.
        ls_objpack-obj_name = 'PO'.
        ls_objpack-obj_descr = lv_pdfname.
        APPEND ls_objpack TO lt_objpack.

        ls_reclist-receiver = lv_receiver."收件人邮箱
        ls_reclist-rec_type = 'U'.
        APPEND ls_reclist TO lt_reclist.
        CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
          EXPORTING
            document_data              = ls_doc_chng  " 邮件属性
            put_in_outbox              = ''
            commit_work                = 'X'
          TABLES
            packing_list               = lt_objpack  " 邮件内容
            contents_bin               = lt_objbin   " 附件内容(二进制)
            contents_txt               = lt_objtxt   " 邮件内容(直接填入)
            receivers                  = lt_reclist  " 收件箱地址
          EXCEPTIONS
            too_many_receivers         = 1
            document_not_sent          = 2
            document_type_not_exist    = 3
            operation_no_authorization = 4
            parameter_error            = 5
            x_error                    = 6
            enqueue_error              = 7
            OTHERS                     = 8.

        IF sy-subrc = 0.
          es_return-type = 'S'.
          es_return-message = es_return-message && TEXT-m19. " 邮件发送成功
          WAIT UP TO 1 SECONDS.
          " 立即发送邮件
          SUBMIT rsconn01                                "#EC CI_SUBMIT
          WITH mode = 'INT' WITH output = '' AND RETURN. ".
        ELSE.
          es_return-type = 'S'.
          es_return-message = es_return-message && TEXT-m20. " 邮件发送失败
        ENDIF.
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值