介绍一个项目中经常会遇到的场景:将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附件)实例相关推荐

  1. 基于python的图形化邮件发送程序(支持添加附件)

    2019独角兽企业重金招聘Python工程师标准>>> 开发环境:centos7 基于:python3.5 调用库:tkinter smtplib email linux中类outl ...

  2. python发邮件给女朋友代码_python实现邮件发送完整代码(带附件发送方式)

    实例一:利用SMTP与EMAIL实现邮件发送,带附件(完整代码) __author__ = 'Administrator' #coding=gb2312 from email.Header impor ...

  3. java实现邮件发送, 抄送及多附件发送

    java实现邮件发送, 抄送及多附件发送 所需的jar包  mailapi.jar和smtp.jar  或  javax-mail-xxx.jar(如javax.mail-1.5.6.jar)  ht ...

  4. ThinkPHP5 封装邮件发送服务(可发附件)

    1.Composer 安装 phpmailer 1 composer require phpmailer/phpmailer 2.ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend ...

  5. SAP 邮件发送记录查询

    事务代码:SOST 查询自SAP端发出的邮件记录.

  6. 邮箱发送SMARTFORMS 转 PDF附件

    事务代码smartforms创建一个表单ZTEST001 将表单转换成PDF并添加到邮件的附件中发送给用户 "---------------------------------------- ...

  7. 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】

    一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...

  8. 邮件发送---在.net2003和2005中

    smtpClient发邮件错误:不允许使用邮箱名称. 服务器响应为: You are not authorized to send mail, authentication is required 使 ...

  9. PHPCMS 邮件发送 - 使用阿里云邮件推送服务的详细设置

    自从阿里云和腾讯云相继默认封闭了云主机的25端口(可申请解封) 我就使用了阿里云的邮件推送服务,感觉很是好用.把我使用PHPCMS做的网站的邮件发送也设置成了使用了阿里云的邮件推送. 我使用的邮箱是阿 ...

最新文章

  1. oracle网站注入,oracle注入,utl_http方法
  2. Spring boot注入配置为java静态属性
  3. leftjoin及多个leftjoin执行顺序
  4. java接口防抖_前端性能优化:高频执行事件/方法的防抖
  5. oracle 联表求和不重复_别再瞎忙了,Excel多表格求和用这4个方法分分钟完成的事...
  6. JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
  7. 全国计算机等级考试题库二级C操作题100套(第79套)
  8. macosx jdk_MacOSX环境上的多个Java JDK
  9. 如何使用GitLab和Rancher构建CI/CD流水线–Part 1
  10. [原]正则表达式模式匹配入门
  11. SpringBoot2注解配置定时任务和异步执行任务
  12. 拓端tecdat|R语言自适应平滑样条回归分析
  13. WIN10如何管理开机启动项?
  14. 什么用matlab做ewma,ewma模型
  15. 诱人福利:猎豹移动雇游轮带全员一块儿航海
  16. 为什么移动在国外显示无服务器,开通了国际漫游怎么还是无服务
  17. 【vue系列-03】vue的计算属性,列表,监视属性及原理
  18. access中,客户端和服务器端链接数据库的详细代码
  19. 网页爬虫为什么需要爬虫ip
  20. 5.23 QQ音乐数据源(新)抓取完整步骤

热门文章

  1. 头歌:图像识别案例在线实验闯关
  2. IO流之字符流+便捷字符流+高效字符流
  3. 多人围成一圈报数问题!
  4. one or more assertions failed
  5. SpringBoot多环境(dev、test、prod)配置详解
  6. tf.reduce_prod用法及tf.placehoder用法
  7. 为什么很多人赚不到钱?赚了钱又存不了钱呢
  8. python实现灰色关联法(GRA)
  9. 互联网时代的版权分销价值
  10. 多项式mod的运算方法