ABAP 根据操作员分组发送邮件
1,获取操作员姓名
SELECT SINGLE ADRP~NAME_TEXT
INTO GS_OUTPUT-UNAMT
FROM ADRP
INNER JOIN USR21
ON ADRP~PERSNUMBER = USR21~PERSNUMBER
WHERE USR21~BNAME = GS_OUTPUT-UNAME.
2,获取操作员邮箱地址
SELECT SINGLE ADR6~SMTP_ADDR
INTO GS_OUTPUT-EMAIL
FROM ADR6
INNER JOIN USR21
ON ADR6~PERSNUMBER = USR21~PERSNUMBER
WHERE USR21~BNAME = GS_OUTPUT-UNAME.
3,创建邮件FORM
FORM FRM_MAIL_BUILD . DATA: LV_EMAIL TYPE AD_SMTPADR,
LV_UNAMT TYPE AD_NAMTEXT,
LV_SUBJECT TYPE SO_OBJ_DES,
LV_BODY_LIN TYPE W3HTML,
LV_BODY_TEXT TYPE TABLE OF W3HTML. LV_SUBJECT = '邮件主题'. LOOP AT GT_OUTPUT INTO GS_OUTPUT.
CLEAR: LV_EMAIL, LV_UNAMT.
LV_EMAIL = GS_OUTPUT-EMAIL.
LV_UNAMT = GS_OUTPUT-UNAMT.
AT NEW UNAME.
CLEAR LV_BODY_LIN.
REFRESH LV_BODY_TEXT.
CONCATENATE LV_BODY_LIN
'<html><body><table width=100% border=1 cellpadding=0
cellspacing=0>'
INTO LV_BODY_LIN.
APPEND LV_BODY_LIN TO LV_BODY_TEXT. CLEAR LV_BODY_LIN.
CONCATENATE LV_BODY_LIN '<tr>DEAR:' LV_UNAMT '</tr><br>'
INTO LV_BODY_LIN.
APPEND LV_BODY_LIN TO LV_BODY_TEXT. CLEAR LV_BODY_LIN.
CONCATENATE LV_BODY_LIN
'<tr>请注意如下人员:' '</tr>'
INTO LV_BODY_LIN.
APPEND LV_BODY_LIN TO LV_BODY_TEXT. CLEAR LV_BODY_LIN.
CONCATENATE '<tr><td align=center height=10>' '人员编号'
'</td><td align=center height=10>' '姓名'
'</td><td align=center height=10>' '合同号'
'</td><td align=center height=10>' '单位名称'
'</td><td align=center height=10>' '操作人'
'</td></tr>'
INTO LV_BODY_LIN.
APPEND LV_BODY_LIN TO LV_BODY_TEXT.
ENDAT.
CLEAR LV_BODY_LIN.
CONCATENATE '<tr><td align=center height=10>' GS_OUTPUT-PERNR
'</td><td align=center height=10>' GS_OUTPUT-ZNAME
'</td><td align=center height=10>' GS_OUTPUT-ZOBJID
'</td><td align=center height=10>' GS_OUTPUT-ZSTEXT
'</td><td align=center height=10>' GS_OUTPUT-UNAMT
'</td></tr>'
INTO LV_BODY_LIN.
APPEND LV_BODY_LIN TO LV_BODY_TEXT.
AT END OF UNAME.
CLEAR LV_BODY_LIN.
CONCATENATE LV_BODY_LIN '</table></body></html>' INTO LV_BODY_LIN.
APPEND LV_BODY_LIN TO LV_BODY_TEXT.
* 调用发送邮件FORM
PERFORM FRM_MAIL_SENT USING LV_EMAIL LV_SUBJECT LV_BODY_TEXT.
ENDAT.
ENDLOOP.
ENDFORM.
4,发送邮件FORM
FORM FRM_MAIL_SENT USING P_EMAIL P_SUBJECT P_BODY_TEXT.
DATA: LV_EMAIL TYPE AD_SMTPADR,
LV_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
LV_SEND_REQUEST TYPE REF TO CL_BCS,
LV_CL_REQ_BCS TYPE REF TO CL_SEND_REQUEST_BCS,
LV_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,
BCS_EXCEPTION TYPE REF TO CX_BCS. TRY.
*创建发送请求
LV_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
*创建发送内容
LV_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'HTM'
I_TEXT = P_BODY_TEXT
I_SUBJECT = P_SUBJECT ).
*添加发送内容到发送请求
LV_SEND_REQUEST->SET_DOCUMENT( LV_DOCUMENT ).
*邮件地址
*1、清空
CALL METHOD CL_SEND_REQUEST_BCS=>CREATE
RECEIVING
RESULT = LV_CL_REQ_BCS.
CALL METHOD LV_CL_REQ_BCS->REMOVE_RECIPIENTS.
*2、转换
TRANSLATE P_EMAIL TO LOWER CASE.
LV_EMAIL = P_EMAIL.
LV_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
LV_EMAIL ).
*3、添加
CALL METHOD LV_SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = LV_RECIPIENT
I_EXPRESS = 'X'.
* 设置立即发送标志
CALL METHOD LV_SEND_REQUEST->SET_STATUS_ATTRIBUTES
EXPORTING
I_REQUESTED_STATUS = 'E'
I_STATUS_MAIL = 'E'.
LV_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ).
* 发送
CALL METHOD LV_SEND_REQUEST->SEND.
COMMIT WORK AND WAIT .
SUBMIT RSCONN01 WITH MODE = 'INT' AND RETURN. * CATCH CX_SEND_REQ_BCS .
CATCH CX_BCS INTO BCS_EXCEPTION.
MESSAGE S865(SO) DISPLAY LIKE 'E' WITH BCS_EXCEPTION->ERROR_TYPE .
ENDTRY.
ENDFORM.
ABAP 根据操作员分组发送邮件的更多相关文章
- 2019.12.05【ABAP随笔】 分组循环(LOOP AT Group) / REDUCE
ABAP 7.40新语法 LOOP AT Group 和 REDUCE *LOOP AT itab result [cond] GROUP BY key ( key1 = dobj1 key2 = d ...
- [SAP ABAP开发技术总结]将文件存储到数据库表中,并可发送邮件
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ABAP技术总结
SAP ——ABAP/4 技术总结 V3.0 2014-10-14 --江正军 1. 1.1. 1.1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 1.7.1. 1.7.2. ...
- 利用SQLServer数据库发送邮件
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候.等等,,, 先 ...
- ABAP单元测试最佳实践
本文包含了我在开发项目中经历过的实用的ABAP单元测试指导方针.我把它们安排成为问答的风格,欢迎任何人添加更多的Q&A's,以完成这个列表. 在我的项目中,只使用传统的ABAP report. ...
- ABAP开发顾问必备:SAP ABAP开发技术总结
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- SQL Server代理(3/12):代理警报和操作员
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的文章里所见,SQL Se ...
- 《BI那点儿事》数据流转换——模糊分组转换
在模糊查找中我们提到脏数据是怎样进入到表中的事情,主要还是由于一些“Lazy-add”造成的.这种情况我们的肉眼很容易被欺骗,看上去是同一个单词,其实就差那么一个字母,变成了两个不同的单词.一个简单的 ...
- SQL Server 2012 使用警报调度数据库作业通知操作员
如果想让数据库满足某种条件时,触动警报,然后执行一系列作业,并通知管理员,则需要配置警报 比如,当数据库日志达到一定大小如10M时触动警报,执行以下3个作业步骤:备份日志.收缩日志文件到2M.完备数据 ...
随机推荐
- VS2010环境下C++工程相关问题汇总
1.链接其他库调试时产生告警: warning LNK4099: 未找到 PDB“vc100.pdb” 解决方案:属性 -> C/C++ -> 输出文件 -> 程序数据库文件名 -& ...
- IOS开发-项目实战-点赞功能的实现
实现思路: 1.每一条新闻就是一个cell,在cell上添加点赞按钮. 2.让cell的控制器成为自定义cell的代理,将点击了哪一个cell放在代理方法中传出去. 3.并将这条新闻的ID和当前用户的 ...
- LVS-DR工作原理图文详解
为了阐述方便,我根据官方原理图另外制作了一幅图,如下图所示:VS/DR的体系结构: 我将结合这幅原理图及具体的实例来讲解一下LVS-DR的原理,包括数据包.数据帧的走向和转换过程. 官方的原理说明:D ...
- boost-asio-cpp-network-programming阅读笔记
第二章:boost.asio 的基本原理 网络api boost.asio的命名空间 IP地址 端点 sockets 同步错误代码 socket成员函数 其他注意事项 read/write/conne ...
- [家里蹲大学数学杂志]第432期Hardy type inequalities
If $p>1$, $f\geq 0$, and $$\bex F(x)=\int_0^x f(t)\rd t, \eex$$ then $$\bee\label{Hardy:0 to x} \ ...
- Xamarin.Froms项目中包含的文件
Clearly, the program created by the Xamarin.Forms template is very simple, so this is an excellent o ...
- 【javascript基础】5、创建对象
前言 今天从家里回到了学校,在家呆了十天,胖了几斤的重量,又折腾回学校了,春节回家真是艰辛的路途.随便扯扯我的往返行程:为了省钱我没有选择直飞到长春往返都是到北京转的,这样我和女朋友可以节省4000块 ...
- ios多线程开发的常用三种方式
1.NSThread 2.NSOperationQueue 3.GCD NSThread: 创建方式主要有两种: [NSThread detachNewThreadSelector:@selector ...
- JQuery的Ajax跨域请求原理概述及实例
今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发 JQuer ...
- C++ 约瑟夫环问题
约瑟夫环比较经典了 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直 ...