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.完备数据 ...
随机推荐
- 51nod 最近刷题 简要题解
51nod 1564 由于数据是随机的,可以证明,对于每一个数,向左或右找比它小的数,长度是logn级别的 考虑枚举最大值 注意,对于每一个最大值,如果直接用2个循环枚举左右端点的话,理论是lognl ...
- SpringMVC 中获取所有的路由配置。
ApplicationContext context = TMSContextLookup.getApplicationContext(); String[] controllerList = con ...
- 全面了解 Linux 服务器 - 3. 查看 Linux 服务器的硬盘使用情况
1)查看硬盘及分区信息 liuqian@ubuntu:~# fdisk -l ...... ...... Disk /dev/sda: 100 GiB, 107374182400 bytes, 209 ...
- Codeforces 723d [暴力dfs]
/* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给n,m和k,n和m为所给矩阵的高和宽.k是要求最多剩下的湖的数量. 在所给的矩阵中,*代表陆地,.代表水. 湖的定义是一片连续的水(上下左右四 ...
- READONLY、、cursor、、VARYING
针对 Transact-SQL 过程的准则:所有 Transact-SQL 数据类型都可以用作参数.您可以使用用户定义的表类型创建表值参数.表值参数只能是 INPUT 参数,并且这些参数必须带有 RE ...
- COSBench性能测试配置--一张图说明一切
COSBench性能测试配置--一张图说明一切: 测试配置,并发数,运行时间设置
- Android基础(13)——对话框 的使用
转自:Android之 对话框 的使用 一个对话框通常是在当前Activity之前显示的一个小的窗口.下面的Activity失去了焦点,上面的对话框接收用户的交互信息.对话框通常用来作为提示以及直接与 ...
- 做一个高效的IOS开发工程师
最近觉得自己的开发效率太慢了,总结了一下:熟练度不够是一方面,经常用到东西查看一下,积累问题?一方面,这个无法分享的.现在主要分享的是:如何高效的用好自己的时间. 1.善用xcode. xcode实在 ...
- mysql分区研究
表分区学习 1. 概述 1.1. 优点: l 将表分区比一个表在单个磁盘或者文件系统存储能够存储更多数据 l 可以通过drop分区删除无用数据,也可以通过增加分区添加数据 l 查询可以通过分区裁剪进行 ...
- projecteuler 10001st prime (求出第10001个质数)
By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. ...