SAP 邮件发送smartform(转成PDF附件)实例
介绍一个项目中经常会遇到的场景:将smartform转化成PDF,然后再把PDF作为邮件的附件发送出去。
1, 创建smartform
Tcode:smartforms创建一个简单的smartform
添加一个文本节点,
2, 创建程序
创建一个abap程序,简单逻辑如下:
1,生成smartform保存到spool中,注意控制参数(control_parameters)和输出选项(output_options )的设定
2,调用RSPO_GET_ATTRIBUTES_SPOOLJOB ()取得spool的属性
3,将spool中smartform转换成PDF
4,通过类cl_bcs将PDF作为附件发送邮件
代码如下:其中有很多错误处理没有写,大家自己完善吧。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
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中,
手动触发后会发送到邮箱里,也可以等待自动触发,具体等待多久要看SOST中的配置。
收到的邮件就是下面这个样子。。
打开PDF
以上。
转载于:http://www.baidusap.com/abap/forms/3087
SAP 邮件发送smartform(转成PDF附件)实例相关推荐
- 基于python的图形化邮件发送程序(支持添加附件)
2019独角兽企业重金招聘Python工程师标准>>> 开发环境:centos7 基于:python3.5 调用库:tkinter smtplib email linux中类outl ...
- python发邮件给女朋友代码_python实现邮件发送完整代码(带附件发送方式)
实例一:利用SMTP与EMAIL实现邮件发送,带附件(完整代码) __author__ = 'Administrator' #coding=gb2312 from email.Header impor ...
- java实现邮件发送, 抄送及多附件发送
java实现邮件发送, 抄送及多附件发送 所需的jar包 mailapi.jar和smtp.jar 或 javax-mail-xxx.jar(如javax.mail-1.5.6.jar) ht ...
- ThinkPHP5 封装邮件发送服务(可发附件)
1.Composer 安装 phpmailer 1 composer require phpmailer/phpmailer 2.ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend ...
- SAP 邮件发送记录查询
事务代码:SOST 查询自SAP端发出的邮件记录.
- 邮箱发送SMARTFORMS 转 PDF附件
事务代码smartforms创建一个表单ZTEST001 将表单转换成PDF并添加到邮件的附件中发送给用户 "---------------------------------------- ...
- 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】
一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...
- 邮件发送---在.net2003和2005中
smtpClient发邮件错误:不允许使用邮箱名称. 服务器响应为: You are not authorized to send mail, authentication is required 使 ...
- PHPCMS 邮件发送 - 使用阿里云邮件推送服务的详细设置
自从阿里云和腾讯云相继默认封闭了云主机的25端口(可申请解封) 我就使用了阿里云的邮件推送服务,感觉很是好用.把我使用PHPCMS做的网站的邮件发送也设置成了使用了阿里云的邮件推送. 我使用的邮箱是阿 ...
最新文章
- oracle网站注入,oracle注入,utl_http方法
- Spring boot注入配置为java静态属性
- leftjoin及多个leftjoin执行顺序
- java接口防抖_前端性能优化:高频执行事件/方法的防抖
- oracle 联表求和不重复_别再瞎忙了,Excel多表格求和用这4个方法分分钟完成的事...
- JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
- 全国计算机等级考试题库二级C操作题100套(第79套)
- macosx jdk_MacOSX环境上的多个Java JDK
- 如何使用GitLab和Rancher构建CI/CD流水线–Part 1
- [原]正则表达式模式匹配入门
- SpringBoot2注解配置定时任务和异步执行任务
- 拓端tecdat|R语言自适应平滑样条回归分析
- WIN10如何管理开机启动项?
- 什么用matlab做ewma,ewma模型
- 诱人福利:猎豹移动雇游轮带全员一块儿航海
- 为什么移动在国外显示无服务器,开通了国际漫游怎么还是无服务
- 【vue系列-03】vue的计算属性,列表,监视属性及原理
- access中,客户端和服务器端链接数据库的详细代码
- 网页爬虫为什么需要爬虫ip
- 5.23 QQ音乐数据源(新)抓取完整步骤