ABAP-如何发用邮件附件的方式发送订单打印的PDF
在工作中,我们常常会遇到以邮件附件的方式发送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相关推荐
- SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;
文章目录 前言 一.配置SonQube生成PDF扫描报告 1.下载gitee开源PDF插件到SonarQube的plugins目录下 2.重启SonarQube载入PDF插件 3.配置SonarQub ...
- java邮件中添加excel_Java以邮件附件的方式发送excel文件
思路:Java创建Excel,返回一个ByteArrayOutputStream 流 ==> sendEmail()接受ByteArrayOutputStream 流以附件的形式发送出去 ...
- java怎么发qq邮件_java代码如何发送QQ邮件
近来想写一个qq之间互相发送邮件的工具.奈何一直报错服务错误: org.apache.commons.mail.EmailException: Sending the email to the fol ...
- BI Publiser bursting 邮件附件名称乱码问题
注:BI Publiser版本为 12.2.1.2.0 当我们使用BI Publiser busrting发送邮件时,可以通过 OUTPUT_NAME来指定邮件附件的名称(PARAMETER6为tru ...
- Centos7或ubuntu18.04配置公共邮箱或个人邮箱发报警邮件
系统:Ubuntu18.04配置方法 使用的软件:heirloom-mailx 亲测可用,这篇文章说的是配置邮箱,并发送邮件,具体报警邮件及脚本后续有空写 1.配置软件源 ubuntu18.04上无法 ...
- 【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP模块-任意rep ...
- python发邮件附件_python 发送带附件的邮件
class Carry_files_EmailSender(object): def __init__(self): self.smtp_host = smtp_host # 发送邮件的smtp服务器 ...
- 附件的文件夹超过了服务器,邮件附件太大发不了 这3种方式了解一下
原标题:邮件附件太大发不了 这3种方式了解一下 日常工作中,员工之间.企业之间通过邮件形式进行信息交换是很普遍的,这也是一种相对较正式的文件交换方式,一般的小文件发送是没有问题的,但是总会遇到一些大容 ...
- 直播app源码,Python发文本/图片/附件邮件
直播app源码,Python发文本/图片/附件邮件实现的相关代码 """ Python发文本/图片/附件邮件 """ import smtp ...
最新文章
- java 中对象引用,以及对象赋值
- 数据结构与算法 | 顺序表
- CentOS 7.6安装 NVIDIA 独立显卡驱动(完整版)
- 软件构架师的十大特点
- 连接池超时配置_HttpClient连接池的一些思考
- Quartz SpringMvc Mybatis操作数据库异常
- 程维谈智慧交通:我们赶上好时代 走出了自己路
- xpath下面的xpath_深入研究XPATH查询
- linux如何打开url,用于打开URL的命令?
- 腾讯荣升Linux基金会白金会员助力支持开源社区
- 2016年ICT行业前瞻:竞合生态,牵着手 一起走
- 如何使用 python glob model
- 并网逆变器的clark、park变换的C语言实现技巧
- 字符串分隔 【问题描述】 输入两个字符串str和cut。cut由若干个字符构成,其中每个字符均可作为一个分隔字符对str进行分隔。
- 基于单层决策树的adaBoost算法思想分析和源代码解析
- Javascript中最常用的55个经典技巧
- java scp 传文件乱码_转-linux 打开移动硬盘中的文本文件显示为乱码
- 【Chrome-crx】键盘模拟鼠标点击网页按钮
- 飞奔的TCL,崛起的中国科技巨头
- 第一篇博客-学习Markdown
热门文章
- 超百个新能源汽车品牌销量滞涨,破局之路何在?
- Visual Studio2019 C# 设计控件显示
- 蚂蚁森林 能量脚本 附 文件以及教程
- 程序员这个身份,比你想象的还值钱
- Android通过AIDL实现接听电话、挂断电话操作 | 拨打电话
- JAVA 数据权限设计
- 如何查国内学术会议(国内会议论文投稿)
- urllib3 (1.26.4) or chardet (4.0.0) doesn‘t match a supported version!
- apache31分是重症吗_APACHE IV:预测危重症患者预后更为有效
- 《Python核心编程》第二版学习总纲