1. FUNCTION zcrm_send_email_and_attach .
  2. *"----------------------------------------------------------------------
  3. *"*"Local Interface:
  4. *" IMPORTING
  5. *" VALUE(IV_TITLE) TYPE STRING OPTIONAL
  6. *" VALUE(IV_HEADER) TYPE STRING OPTIONAL
  7. *" VALUE(IV_BODY) TYPE STRING OPTIONAL
  8. *" VALUE(IT_TABLE) TYPE ANY TABLE OPTIONAL
  9. *" EXPORTING
  10. *" VALUE(ES_ZCRMS_MESSAGE) TYPE ZCRMS_MESSAGE
  11. *" TABLES
  12. *" IT_RECLIST STRUCTURE SOMLRECI1 OPTIONAL
  13. *"----------------------------------------------------------------------
  14. ***数据定义
  15. FIELD-SYMBOLS:
  16. <fs_comp> TYPE abap_compdescr,
  17. <fs_value> TYPE any,
  18. <fs_line> TYPE any,
  19. <fs_col> TYPE any.
  20. ***fill_text
  21. CLEAR:gs_solisti1.
  22. REFRESH:gt_solisti1.
  23. gs_solisti1 = '<head>'.
  24. APPEND gs_solisti1 TO gt_solisti1.
  25. gs_solisti1 = '</head>'.
  26. APPEND gs_solisti1 TO gt_solisti1.
  27. gs_solisti1 = '<body>'.
  28. APPEND gs_solisti1 TO gt_solisti1.
  29. IF iv_header IS NOT INITIAL.
  30. CONCATENATE '<h3>' iv_header '</h3>' INTO gs_solisti1.
  31. APPEND gs_solisti1 TO gt_solisti1.
  32. ENDIF.
  33. gs_solisti1 = '<table border="0">'.
  34. APPEND gs_solisti1 TO gt_solisti1.
  35. IF iv_body IS NOT INITIAL.
  36. gs_solisti1 = '<tr>'.
  37. APPEND gs_solisti1 TO gt_solisti1.
  38. gs_solisti1 = iv_body.
  39. APPEND gs_solisti1 TO gt_solisti1.
  40. gs_solisti1 = '</tr>'.
  41. APPEND gs_solisti1 TO gt_solisti1.
  42. ENDIF.
  43. gs_solisti1 = '<table border="1">'.
  44. APPEND gs_solisti1 TO gt_solisti1.
  45. gs_solisti1 = '<tr>'.
  46. APPEND gs_solisti1 TO gt_solisti1.
  47.  
  48. REFRESH:gt_dd03t,gt_ddfields.
  49. CLEAR:gv_tablesize,gv_check.
  50. IF it_table IS NOT INITIAL.
  51. LOOP AT it_table ASSIGNING <gs_line>.
  52. gr_cl_abap_structdescr ?= cl_abap_typedescr=>describe_by_data( <gs_line> ).
  53. *表头
  54. IF gt_ddfields[] IS INITIAL.
  55. CALL METHOD gr_cl_abap_structdescr->get_ddic_field_list
  56. EXPORTING
  57. p_langu = sy-langu
  58. RECEIVING
  59. p_field_list = gt_ddfields
  60. EXCEPTIONS
  61. not_found =
  62. no_ddic_type =
  63. OTHERS = .
  64. IF sy-subrc <> .
  65. * Implement suitable error handling here
  66. ENDIF.
  67. ENDIF.
  68. IF gv_check = abap_false.
  69. CLEAR:gs_solisti1.
  70. LOOP AT gt_ddfields INTO gs_ddfields.
  71. IF gs_solisti1 IS INITIAL.
  72. CONCATENATE '<td>' gs_ddfields-fieldtext '</td>' INTO gs_solisti1.
  73. ELSE.
  74. CONCATENATE gs_solisti1 '<td>' gs_ddfields-fieldtext '</td>' INTO gs_solisti1.
  75. ENDIF.
  76. gv_check = abap_true.
  77. gv_tablesize = gv_tablesize + gs_ddfields-leng.
  78. ENDLOOP.
  79. APPEND gs_solisti1 TO gt_solisti1.
  80. ENDIF.
  81. *表内容
  82. gs_solisti1 = '<tr>'.
  83. LOOP AT gr_cl_abap_structdescr->components ASSIGNING <fs_comp>.
  84. ASSIGN <fs_comp>-name TO <fs_col>.
  85. ASSIGN COMPONENT <fs_col> OF STRUCTURE <gs_line> TO <gs_field>.
  86. WRITE <gs_field> TO gv_field.
  87. CONCATENATE gs_solisti1 '<td >' gv_field '</td> ' INTO gs_solisti1.
  88. ENDLOOP.
  89. APPEND gs_solisti1 TO gt_solisti1.
  90. gs_solisti1 = '</tr>'.
  91. APPEND gs_solisti1 TO gt_solisti1.
  92. ENDLOOP.
  93. ENDIF.
  94. gs_solisti1 = '</table>'.
  95. APPEND gs_solisti1 TO gt_solisti1.
  96. gs_solisti1 = '</table>'.
  97. APPEND gs_solisti1 TO gt_solisti1.
  98. ***fill_object_details
  99. CLEAR:gv_strlen.
  100. DESCRIBE TABLE gt_solisti1 LINES gv_strlen.
  101. READ TABLE gt_solisti1 INTO gs_solisti1 INDEX gv_strlen.
  102. CLEAR:gs_sodocchgi1.
  103. REFRESH:gt_sopcklsti1.
  104. gs_sodocchgi1-obj_name = 'SAPCRM'.
  105. gs_sodocchgi1-obj_descr = iv_title.
  106. gs_sodocchgi1-sensitivty = 'F'.
  107. gs_sodocchgi1-obj_langu = sy-langu.
  108. gs_sodocchgi1-doc_size = ( gv_strlen - ) * + strlen( gs_solisti1 ).
  109. CLEAR gs_sopcklsti1-transf_bin.
  110. gs_sopcklsti1-head_start = .
  111. gs_sopcklsti1-head_num = .
  112. gs_sopcklsti1-body_start = .
  113. gs_sopcklsti1-body_num = gv_strlen.
  114. gs_sopcklsti1-doc_type = 'HTM'.
  115. APPEND gs_sopcklsti1 TO gt_sopcklsti1.
  116. ****Define Attachment
  117. ****EXCEL附加抬头
  118. CLEAR:gv_string,gv_lines,gv_number.
  119. DESCRIBE TABLE gt_ddfields LINES gv_lines.
  120. LOOP AT gt_ddfields INTO gs_ddfields.
  121. gv_number = gv_number + .
  122. IF gv_lines = gv_number.
  123. CONCATENATE gv_string gs_ddfields-fieldtext gc_crlf INTO gv_string.
  124. ELSE.
  125. IF gv_string IS INITIAL.
  126. CONCATENATE gs_ddfields-fieldtext gc_tab INTO gv_string.
  127. ELSE.
  128. CONCATENATE gv_string gs_ddfields-fieldtext gc_tab INTO gv_string.
  129. ENDIF.
  130. ENDIF.
  131. ENDLOOP.
  132. ****EXCEL附加内容
  133. LOOP AT it_table ASSIGNING <gs_line>.
  134. gr_cl_abap_structdescr ?= cl_abap_typedescr=>describe_by_data( <gs_line> ).
  135. CLEAR:gv_number.
  136. LOOP AT gr_cl_abap_structdescr->components ASSIGNING <fs_comp>.
  137. gv_number = gv_number + .
  138. ASSIGN <fs_comp>-name TO <fs_col>.
  139. ASSIGN COMPONENT <fs_col> OF STRUCTURE <gs_line> TO <gs_field>.
  140. WRITE <gs_field> TO gv_field.
  141. IF gv_lines = gv_number.
  142. CONCATENATE gv_string gv_field gc_crlf INTO gv_string.
  143. ELSE.
  144. CONCATENATE gv_string gv_field gc_tab INTO gv_string.
  145. ENDIF.
  146. ENDLOOP.
  147. ENDLOOP.
  148. * Convert string to xstring type
  149. * 'APPLICATION/MSEXCEL;charset=utf-16le'
  150. CLEAR:gv_xstring.
  151. CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  152. EXPORTING
  153. text = gv_string
  154. mimetype = gc_mimetype
  155. IMPORTING
  156. buffer = gv_xstring
  157. EXCEPTIONS
  158. failed =
  159. OTHERS = .
  160. * Add the file header for utf-16le. .
  161. IF sy-subrc = .
  162. CONCATENATE cl_abap_char_utilities=>byte_order_mark_little
  163. gv_xstring INTO gv_xstring IN BYTE MODE.
  164. ENDIF.
  165.  
  166. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  167. EXPORTING
  168. buffer = gv_xstring
  169. TABLES
  170. binary_tab = gt_solix.
  171.  
  172. ***计算附件大小分配空间*******************
  173. DESCRIBE TABLE it_table LINES gv_lines.
  174. gv_lines = gv_lines * .
  175. gs_sopcklsti1-transf_bin = 'X'.
  176. gs_sopcklsti1-head_start = .
  177. gs_sopcklsti1-head_num = .
  178. gs_sopcklsti1-body_start = .
  179. gs_sopcklsti1-body_num = gv_lines + .
  180. gs_sopcklsti1-doc_type = 'xls'.
  181. gs_sopcklsti1-obj_name = 'ATTACHMENT'.
  182. gs_sopcklsti1-obj_descr = iv_title.
  183. gs_sopcklsti1-doc_size = gs_sopcklsti1-body_num * gv_tablesize * gv_lines .
  184. *gv_tablesize
  185. APPEND gs_sopcklsti1 TO gt_sopcklsti1.
  186.  
  187. ***SO_DOCUMENT_SEND_API1邮件函数
  188. CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
  189. EXPORTING
  190. document_data = gs_sodocchgi1
  191. put_in_outbox = ''
  192. commit_work = 'X'
  193. TABLES
  194. packing_list = gt_sopcklsti1
  195. * OBJECT_HEADER =
  196. * CONTENTS_BIN =
  197. contents_txt = gt_solisti1
  198. contents_hex = gt_solix
  199. * OBJECT_PARA =
  200. * OBJECT_PARB =
  201. receivers = it_reclist
  202. * ET_VSI_ERROR =
  203. EXCEPTIONS
  204. too_many_receivers =
  205. document_not_sent =
  206. document_type_not_exist =
  207. operation_no_authorization =
  208. parameter_error =
  209. x_error =
  210. enqueue_error =
  211. OTHERS = .
  212. IF sy-subrc = .
  213. es_zcrms_message-type = gc_s.
  214. es_zcrms_message-message = text-."'Message sent successfully!'.
  215. * Implement suitable error handling here
  216. "立即发送
  217. SUBMIT rsconn01 WITH mode = 'INT'
  218. * with output = 'X'
  219. AND RETURN.
  220. * MESSAGE s001(00) WITH 'Message sent successfully!'.
  221. ELSE.
  222. es_zcrms_message-type = gc_e.
  223. es_zcrms_message-message = text-."'Message sent failure!'.
  224. ENDIF.
  225. ENDFUNCTION.

SEND EMAIL SO_DOCUMENT_SEND_API1的更多相关文章

  1. Try to write a script to send e-mail but failed

    #-*-coding: utf-8 -*- '''使用Python去发送邮件但是不成功,运行后,等待一段时间, 返回[Errno 10060] A connection attempt failed ...

  2. python auto send email

    /*************************************************************************** * python auto send emai ...

  3. Check SMTP Server Availability for ORA-29278 or ORA-29279 errors using UTL_SMTP to Send Email

    Check SMTP Server Availability for ORA-29278 or ORA-29279 errors using UTL_SMTP to Send Email. (文档 I ...

  4. Send Email in Robot Framework Python Using Gmail

    转载自:http://seleniummaster.com/sitecontent/index.php/selenium-robot-framework-menu/selenium-robot-fra ...

  5. 5 Ways to Send Email From Linux Command Line

    https://tecadmin.net/ways-to-send-email-from-linux-command-line/ We all know the importance of email ...

  6. [476] Database Mail is not enabled for agent notifications. Cannot send e-mail to

    配置完DB Mail后JOB的的通知邮件不能发送,日志报错476] Database Mail is not enabled for agent notifications. Cannot send ...

  7. Send email alert from Performance Monitor using PowerShell script (检测windows服务器的cpu 硬盘 服务等性能,发email的方法) -摘自网络

    I have created an alert in Performance Monitor (Windows Server 2008 R2) that should be triggered whe ...

  8. Send Email

    private string SendEmail(string mailTo, string body, ref int sendresult) { string errorEmailAddress ...

  9. .Net Core Send Email

    1.安装Nuget包MailKit,引用命名空间. using MailKit.Net.Smtp; using MimeKit; 注意:引用MailKit对应最新版本 2.定义收发地址和标题 Mime ...

随机推荐

  1. PTA 输出全排列(20 分)

    7-2 输出全排列(20 分) 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出正整数n(<10). ...

  2. HDU 5441 Travel(并查集+统计节点个数)

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给出一个图,每条边有一个距离,现在有多个询问,每个询问有一个距离值d,对于每一个询问,计算出有多少点 ...

  3. python3 session cookie

    session是保存在服务器中的,而cookies是保存在客户端中的.服务器通过session id来跟踪客户,而对于客户端而言,session id是保存在cookies中的,所以只要把cookie ...

  4. 给 layui upload 带每个文件的进度条, .net 后台代码

    1.upload.js 扩展 功能利用ajax的xhr属性实现该功能修改过modules中的upload.js文件功能具体实现:在js文件中添加监听函数 //创建监听函数 var xhrOnProgr ...

  5. _itemmod_currency_like

    设置物品掉落模式为货币类型功能:掉落的时候 所有人都可以拿,就像公正徽章,每个人都会获得一个.小技巧:配合DBC使用,可以将该道具其显示在角色栏的货币中.1.转存item_template,在item ...

  6. Ubuntu18.04的网络配置

    网卡与DNS配置 1)打开命令窗口(右键单机桌面选择Open Terminal或者用快捷键Ctrl+Alt+T打开终端),输入ip a查看自己的网卡编号 2)输入命令sudo vim /etc/net ...

  7. Eclipse调试DEBUG时快速查看某个变量的值的快捷键、快速跳转到某行的快捷键

    Eclipse调试DEBUG时快速查看某个变量的值的快捷键 Ctrl + Shift + i

  8. SpringBoot整合Servlet的两种方式

    SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...

  9. MySQL学习(十六)

    MySQL高级部分 触发器 触发器是一类特殊的事务,可以监视某种数据操作(insert/update/delete),并触发相关的操作(insert/update/delete) 触发器创建语法之4要 ...

  10. 解决ios下的微信页面背景音乐无法自动播放问题

    在做各种html5场景页面的时候,插入背景音乐是一个很普遍的需求,我们都知道,ios下的safari是无法自动播放音乐的,以至于现在行程一种认知,ios是没有办法自动播放媒体资源的,这个认知其实是错误 ...