在工作中,我们常常会遇到以邮件附件的方式发送SAP的订单,出库单或者发票等信息给客户。我这里将实现摘抄下来,供大家参考:

1、设计订单打印smarfform(这就不累述了)

2、设计订单打印程序:几个关键代码照抄如下:

2.1 调用打印程序生成PDF

*---------------------------------------------------------------------*
*       FORM PROCESSING                                               *
*---------------------------------------------------------------------*
FORM processing.

DATA: it_otf   TYPE STANDARD TABLE OF itcoo,
      lt_docs  TYPE STANDARD TABLE OF docs,
      lt_lines TYPE STANDARD TABLE OF tline.

........

*获取smartform的函数

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           = lf_formname
        IMPORTING
          fm_name            = lf_fm_name
        EXCEPTIONS
          no_form            = 1
          no_function_module = 2
          OTHERS             = 3.
      IF sy-subrc <> 0.
*   error handling
        retcode = sy-subrc.
        IF sy-subrc = 1.
          MESSAGE e006(/kyk/ops_sd) INTO g_dummy.
        ENDIF.
        IF sy-subrc = 2.
          MESSAGE e007(/kyk/ops_sd) WITH lf_formname INTO g_dummy.
        ENDIF.
        PERFORM protocol_update.
        RETURN.
      ENDIF.
*准备打印的数据
      tvbdpa1[] = tvbdpa[].
      REFRESH tvbdpa.
      LOOP AT gt_items INTO gs_items.
        READ TABLE tvbdpa1 INTO ls_tvbdpa WITH KEY posnr = gs_items-posnr.
        IF sy-subrc = 0.
          APPEND ls_tvbdpa TO tvbdpa.
        ENDIF.
      ENDLOOP.

*调用smartform的函数,输出
      CALL FUNCTION lf_fm_name
        EXPORTING
          archive_index        = toa_dara
          archive_parameters   = arc_params
          control_parameters   = ls_control_param
          mail_recipient       = ls_recipient
          mail_sender          = ls_sender
          output_options       = ls_composer_param
          user_settings        = ' '
          is_nast              = nast
          is_vbdka             = vbdka
          is_addres            = addr_key
          is_items             = gt_items
        IMPORTING
          document_output_info = document_output_info
          job_output_info      = job_output_info
          job_output_options   = job_output_options
        TABLES
          it_vbdpa             = tvbdpa    "Item information
          it_vbdpau            = tvbdpau   "Subitem numbers
          it_vedpa             = tkomservp  "Contract Item Validity
          it_vedka             = tkomservh  "Contract Header Validity
          it_vedpn             = tkomservpn "Contract Item Cancellation Data
          it_vedkn             = tkomservhn "Contract Header Cancellation DA
        EXCEPTIONS
          formatting_error     = 1
          internal_error       = 2
          send_error           = 3
          user_canceled        = 4
          OTHERS               = 5.
*将答应输出转成PDF文件并存储到内标 lt_lines用于发送
      CLEAR : lt_lines.
      CALL FUNCTION 'CONVERT_OTF_2_PDF'
        IMPORTING
          bin_filesize               = v_bin_filesize
        TABLES
          otf                             = job_output_info-otfdata
          doctab_archive         = lt_docs
          lines                          = lt_lines
        EXCEPTIONS
          err_conv_not_possible  = 1
          err_otf_mc_noendmarker = 2
          OTHERS                 = 3.

*将lt_lines 转换到

PERFORM zqce1_convert
           TABLES
                lt_lines
                objbin.

.........

ENDFORM.

FORM zqce1_convert TABLES   t_source_tab STRUCTURE g_pdf_tab
                            t_target_tab STRUCTURE objbin.

DATA:  l_hfeld(1600)      TYPE c,
         l_offset           TYPE p,

l_tabix            LIKE sy-tabix,
         l_max              TYPE i,
         l_linecount_source TYPE i,
         l_length_source    TYPE i,
         l_length_target    TYPE i.

* line length source pdf files
  DESCRIBE FIELD t_source_tab LENGTH l_length_source IN CHARACTER MODE.
* line length of the goal MIME table
  DESCRIBE FIELD t_target_tab LENGTH l_length_target IN CHARACTER MODE.
* number of lines source pdf files
  DESCRIBE TABLE t_source_tab LINES l_linecount_source.
* the maximum goal size is limited by the field l_hfeld.
  l_max = l_length_target + l_length_source.
  IF l_max > 1600.
    RAISE convert_not_possible.
  ENDIF.
  REFRESH t_target_tab.
  LOOP AT t_source_tab.
    l_tabix = sy-tabix.
    MOVE t_source_tab TO l_hfeld+l_offset.
* falls letzte zeile der quelltabelle erreicht
    IF l_tabix = l_linecount_source.
      l_length_source = strlen( t_source_tab ).
    ENDIF.
    l_offset = l_offset + l_length_source.
    WHILE l_offset GE l_length_target.
      CLEAR t_target_tab.
      t_target_tab = l_hfeld(l_length_target).
      APPEND t_target_tab.
      SHIFT l_hfeld BY l_length_target PLACES.
      l_offset = l_offset - l_length_target.
    ENDWHILE.                          " l_offset ge p_length_targ
* falls letzte zeile der quelltabelle erreicht
    IF l_tabix = l_linecount_source.
      IF l_offset GT 0.
        CLEAR t_target_tab.
        t_target_tab = l_hfeld(l_offset).
        APPEND t_target_tab.
      ENDIF.                           " l_offset gt 0
    ENDIF.                             " l_tabix = l_linecount_lin
  ENDLOOP.                             " p_source_tab
ENDFORM.

2.2 调用程序发送邮件

*填写邮件内容内表

MOVE '<body bgcolor = "#E6E6FA">' TO ls_body_msg-line.
    APPEND ls_body_msg TO lt_body_msg.

........
    MOVE '</body>' TO ls_body_msg-line.
    APPEND ls_body_msg TO lt_body_msg.

*准备邮件发送内表

"Write Packing List for Body
    CLEAR: lt_packing_list, ls_packing_list.
    DESCRIBE TABLE lt_body_msg LINES g_tab_lines.
    ls_packing_list-head_start = 1.
    ls_packing_list-head_num   = 0.
    ls_packing_list-body_start = 1.
    ls_packing_list-body_num   = g_tab_lines.
*    ls_packing_list-doc_type   = 'RAW'.                       "V005
    ls_packing_list-doc_type   = 'HTM'.                       "V005
    APPEND ls_packing_list TO lt_packing_list .
*准备Packing List for Attachment
      ls_packing_list-transf_bin = 'X'.
      ls_packing_list-head_start = 1.
      ls_packing_list-head_num   = 1.
      ls_packing_list-body_start = 1.
      DESCRIBE TABLE objbin LINES ls_packing_list-body_num.
      ls_packing_list-doc_type   = 'PDF'.
      ls_packing_list-obj_descr  = 'PDF Attachment'.
      ls_packing_list-obj_name   = 'PDF_ATTACHMENT'.
      ls_packing_list-doc_size   = ls_packing_list-body_num * 255.
      APPEND ls_packing_list TO lt_packing_list.
*Fill the document data and get size of attachment
    ls_document_data-obj_langu  = nast-spras.
    READ TABLE lt_packing_list  INTO ls_packing_list INDEX g_tab_lines.
    ls_document_data-doc_size = ( g_tab_lines - 1 ) * 255 + strlen( ls_packing_list ).
*填写邮件地址
    "Receivers List.
    ls_receivers-rec_type   = 'U'.  "Internet address
    ls_receivers-receiver   = p_mail.
    ls_receivers-com_type   = 'INT'.
    ls_receivers-notif_del  = 'X'.
    ls_receivers-notif_ndel = 'X'.
    APPEND ls_receivers TO lt_receivers .
    CLEAR:ls_receivers.
*发送邮件
    CLEAR g_sent_to_all.
    "Function module to send mail to Recipients
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
      EXPORTING
        document_data              = ls_document_data
        put_in_outbox              = 'X'
        commit_work                = 'X'
      IMPORTING
        sent_to_all                = g_sent_to_all
      TABLES
        packing_list               = lt_packing_list
        contents_bin               = objbin
        contents_txt               = lt_body_msg
        receivers                  = lt_receivers
      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 .
      MESSAGE i303(me) WITH 'Mail has been Successfully Sent.'.
      REFRESH : lt_packing_list,
                objbin,
                lt_body_msg,
                lt_receivers.
      CLEAR :
           ls_document_data.
    ELSE.
      WAIT UP TO 2 SECONDS.
      "This program starts the SAPconnect send process.
      SUBMIT rsconn01 WITH mode = 'INT'
      WITH output = 'X'
      AND RETURN.
    ENDIF.

3、定义订单输出

4、创建后台任务定期发送打印

使用sm36创建后台任务,任务调用SD70AV1A,SD70AV2A,SD70AV3A程序即可。

完成以上步骤,系统就能够自动通过邮件的方式发送订单的PDF文件了。

供大家参考!

ABAP-如何发用邮件附件的方式发送订单打印的PDF相关推荐

  1. SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;

    文章目录 前言 一.配置SonQube生成PDF扫描报告 1.下载gitee开源PDF插件到SonarQube的plugins目录下 2.重启SonarQube载入PDF插件 3.配置SonarQub ...

  2. java邮件中添加excel_Java以邮件附件的方式发送excel文件

    思路:Java创建Excel,返回一个ByteArrayOutputStream 流   ==>   sendEmail()接受ByteArrayOutputStream 流以附件的形式发送出去 ...

  3. java怎么发qq邮件_java代码如何发送QQ邮件

    近来想写一个qq之间互相发送邮件的工具.奈何一直报错服务错误: org.apache.commons.mail.EmailException: Sending the email to the fol ...

  4. BI Publiser bursting 邮件附件名称乱码问题

    注:BI Publiser版本为 12.2.1.2.0 当我们使用BI Publiser busrting发送邮件时,可以通过 OUTPUT_NAME来指定邮件附件的名称(PARAMETER6为tru ...

  5. Centos7或ubuntu18.04配置公共邮箱或个人邮箱发报警邮件

    系统:Ubuntu18.04配置方法 使用的软件:heirloom-mailx 亲测可用,这篇文章说的是配置邮箱,并发送邮件,具体报警邮件及脚本后续有空写 1.配置软件源 ubuntu18.04上无法 ...

  6. 【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP模块-任意rep ...

  7. python发邮件附件_python 发送带附件的邮件

    class Carry_files_EmailSender(object): def __init__(self): self.smtp_host = smtp_host # 发送邮件的smtp服务器 ...

  8. 附件的文件夹超过了服务器,邮件附件太大发不了 这3种方式了解一下

    原标题:邮件附件太大发不了 这3种方式了解一下 日常工作中,员工之间.企业之间通过邮件形式进行信息交换是很普遍的,这也是一种相对较正式的文件交换方式,一般的小文件发送是没有问题的,但是总会遇到一些大容 ...

  9. 直播app源码,Python发文本/图片/附件邮件

    直播app源码,Python发文本/图片/附件邮件实现的相关代码 """ Python发文本/图片/附件邮件 """ import smtp ...

最新文章

  1. java 中对象引用,以及对象赋值
  2. 数据结构与算法 | 顺序表
  3. CentOS 7.6安装 NVIDIA 独立显卡驱动(完整版)
  4. 软件构架师的十大特点
  5. 连接池超时配置_HttpClient连接池的一些思考
  6. Quartz SpringMvc Mybatis操作数据库异常
  7. 程维谈智慧交通:我们赶上好时代 走出了自己路
  8. xpath下面的xpath_深入研究XPATH查询
  9. linux如何打开url,用于打开URL的命令?
  10. 腾讯荣升Linux基金会白金会员助力支持开源社区
  11. 2016年ICT行业前瞻:竞合生态,牵着手 一起走
  12. 如何使用 python glob model
  13. 并网逆变器的clark、park变换的C语言实现技巧
  14. 字符串分隔 【问题描述】 输入两个字符串str和cut。cut由若干个字符构成,其中每个字符均可作为一个分隔字符对str进行分隔。
  15. 基于单层决策树的adaBoost算法思想分析和源代码解析
  16. Javascript中最常用的55个经典技巧
  17. java scp 传文件乱码_转-linux 打开移动硬盘中的文本文件显示为乱码
  18. 【Chrome-crx】键盘模拟鼠标点击网页按钮
  19. 飞奔的TCL,崛起的中国科技巨头
  20. 第一篇博客-学习Markdown

热门文章

  1. 超百个新能源汽车品牌销量滞涨,破局之路何在?
  2. Visual Studio2019 C# 设计控件显示
  3. 蚂蚁森林 能量脚本 附 文件以及教程
  4. 程序员这个身份,比你想象的还值钱
  5. Android通过AIDL实现接听电话、挂断电话操作 | 拨打电话
  6. JAVA 数据权限设计
  7. 如何查国内学术会议(国内会议论文投稿)
  8. urllib3 (1.26.4) or chardet (4.0.0) doesn‘t match a supported version!
  9. apache31分是重症吗_APACHE IV:预测危重症患者预后更为有效
  10. 《Python核心编程》第二版学习总纲