一
前言
项目中总会有人提出发邮件通知的需求
订单创建后,请发邮件通知领导审批
数据维护了一半,请发邮件通知其它部门完成另一半
系统报错了,请发邮件通知管理员及时处理
孩子要出生了, 请发邮件通知孩他爹来医院
……
这么多的通知需求,能不能用一个统一的程序(平台)通过配置实现呢?
本文基于前文
前文链接
无峰,公众号:ABAP 技巧与实战SAP工具箱 邮件通知平台
主要介绍针对邮件通知平台的部分优化功能
二
改进邮件调用方式
封装的邮件发送函数 ZBC_EMAIL_001 调用通过
函数 SO_NEW_DOCUMENT_ATT_SEND_API1 发送邮件.
改进的邮件发送函数 ZBC_EMAIL_NEW 通过调用 CL_BCS类的方法,发送邮件.
CL_BCS的使用可以参考系统标准的示例程序 BCS_EXAMPLE*
需要注意的是, 发送后需要 执行commit work 语句提交, 否则邮件无法发送出去.
发送后,可以调用程序 RSCONN01 立即发送(否则系统会基于后台任务,该后台任务也是调度这个程序)
SAPCONNECT ALL 调度邮件的实际发送,
发送的邮件, 可以通过TCODE: SCOT或SOST 查看系统的邮件发送状态
没有提交的邮件,SCOT 中出站发送请求中将显示状态 队列中仍无条目
这两个方法还有一个差异
函数SO_NEW_DOCUMENT_ATT_SEND_API1 发送的邮件,在邮件发送监控中可以看到绿色图标,表示成功,
但是通过类CL_BCS发送的邮件, 则会显示 接收者 <邮箱地址> 无效。已尝试发送 . 但实际邮箱中已收到该邮件.
这个问题产生的原因不明, 如果你知道解决办法, 不吝赐教.(已解决)
发布文章之前特意又跟踪了一下
函数SO_NEW_DOCUMENT_ATT_SEND_API1. 发现该函数底层也是调用CL_BCS发送 同时在底层函数 SBCOMS_SEND_REQUEST_CREATE 中设置了一个状态
参考该段逻辑优化了 函数 ZBC_EMAIL_NEW, 添加了设置状态部分代码.
实测可以解决SOST发送监控中的指示灯问题
三
优化邮件内容显示
优化邮件的正文,采用HTM 呈现内容. 相比 RAW 呈现, HTM 需要传递HTML 内容. 可以更加美观的呈现出邮件正文
通过下方二者呈现方式的对比, 可以看到HTM方式中可以通过表格,链接,字体 等美化正文内容的呈现
HTM呈现
RAW呈现
三
封装内表转换HTML表格
内表的内容, 转换成HTML表格, 这部分逻辑比较通用, 封装到类方法中.
ZCL_REP_COMM_SALES_MAIL=> GET_HTML_FROM_ITAB. 代码逻辑比较简单, 需要的可以通过下图参考一下.
四
添加附件功能
监控配置表 ZTBC_MONI_CONFG 补充了几个字段
01
ADD_ATTACHMENT添加附件,
添加附件(附件信息来自于监控的表的明细内容)
远程系统的表内容无法简单的动态读取. 目前不支持读取远程系统的明细
如果明细方式设置为
X ,则自动生成明细的电子表格作为附件
H ,则自动生成正文的表格(需要注意的是,字段过多时,正文表格会显示不完整)
A .同时生成正文的表格及EXCEL附件
02
ADD_TABLE_LINES明细内容作为正文表格的最大显示行
如果通过 ADD_ATTACHMENT = ‘X’ OR ‘A’ 允许正文中显示明细, 为了避免由于明细过多导正文内容太大,通过这个字段限制正文表格的最大显示行数.
03
ATTACH_FIELDS字段清单
通过字段清单的配置, 控制ZMONT_TABLE 中维护的监控表中的哪些字段参与明细的输出(正文或邮件的附件)
五
WEBGUI链接
WEBGUI_ADDRESS附加WEBGUI地址
添加一个链接,通过WEBGUI调用指定的事务代码.
用户点击链接后可以直接跳转网页显示指定程序
程序中需动态生成该链接, 对于域名,端口,集团 等参数需要通过系统变量读取
域名,端口 可以通过
函数 TH_GET_VIRT_HOST_DATA 获取
示例:
http://bfdaeccdev.bfda.cn:8000/sap/bc/gui/sap/its/webgui?sap-client=300&sap-theme=SAP_SIGNATURE&sap-user=test_user&sap-password=Aa12345678&&~transaction=*ZBC_MONITOR%20S_MONTID-LOW=IDOC_MONI;S_ERDAT-LOW=20220830;p_nozero=
WEBGUI 可以通过上述方式直接显示指定的事务代码, 并且可以传递选择屏幕的选择条件 可以传递用户,密码跳过登录界面
?sap-client 集团
&sap-theme 主题
&sap-user 用户
&sap-password 密码
~transaction=*<事务代码>(两种调用方式: 事务代码前面添加 * 系统会跳过事务代码的选择屏幕 如果不添加* 系统会停留在选择屏幕)
%20S_MONTID 传递的选择平参数S_MONTID, 多个参数通过;分割
六
总结
邮件通知平台在项目中具体应用时,在采纳用户提出的意见的基础上,添加一些个人的归纳总结,争取把该平台做的更加完善,好用.
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论