预警插件——消息解析插件使用说明
为针对不同的业务场景提供定制化的预警功能,平台提供了预警插件机制,使用者可以通过编写插件对预警监控过程进行干预,从而实现使用定制化预警功能。下图为预警平台插件设置入口在新增/编辑业务预警对象页面。
![0109d30c339b5e62424096e1901ae4cb9d03.webp](https://vip.kingdee.com/download/0109d30c339b5e62424096e1901ae4cb9d03.webp)
预警平台提供了单据、基础资料的默认消息解析插件DefaultBillMessageCompiler,但是该插件中的模板数据只能来源于指定的单据和基础资料,如若想在消息中添加一些来源于其他单据的数据,可以通过自定义消息解析插件来达到预期的效果。
## 业务场景
某企业需要对商品库存进行低库存的预警,在预警触发后以特定消息格式发送。
## 实现方案
编写消息解析插件,实现IEarlyWarnMessageCompiler接口。框架通过上下文将预警数据、模板传递给接口,用户在接口中获取当前预警的数据,从库存批次表中获取出对应批次的信息,用户构建所需要的预警信息即可。
## 代码示例
```
/**
*在用户信息表中获取用户工号和姓名,同时自定义一个字段,在预警通知中展示对应内容。
*/
public class MessageCompilerDemo implements IEarlyWarnMessageCompiler {
/**
* 构建单个消息
* @param expression 表达式
* @param fields 参数列表
* @param data 数据
* @param context 预警引擎执行上下文
* @return
*/
@Override
public String getSingleMessage(String expression, List<String> fields, DynamicObject data, EarlyWarnContext context) {
if (expression == null || data == null){
return "";
}
Map<String, String> map = new HashMap<>();
for (String field : fields) {
String value = "";
if ("customField".equals(field)){
value = "自定义字段:负责人请抓紧时间处理";
}else {
String[] arr = StringUtil.split(field, ".");
Object objValue = getValue(data, arr);
value = objValue == null?"" : objValue.toString();
}
map.put(field,value);
}
StringTemplateParser parser = new StringTemplateParser();
return parser.parse(expression,name->map.get(name));
}
private String getValue(DynamicObject data, String[] arr) {
if(null == arr || arr.length == 0){
return "";
}
Object obj = data.get(arr[0]);
if(obj instanceof DynamicObject){
return getValue((DynamicObject)obj, Arrays.copyOfRange(arr, 1, arr.length));
}
return StringUtil.toSafeString(obj);
}
/**
* 构建合并消息(同构建单个消息的原理一样)
* @param expression 表达式
* @param fields 参数列表
* @param context 预警引擎执行上下文
* @return
*/
@Override
public String getMergeMessage(String expression, List<String> fields, EarlyWarnContext context) {
return null;
}
/**
* 例子:如果预警数据中包含附件内容,也可以用邮件的方式发送附件
* 构建单条消息邮件发送方式的附件内容
* @param data 数据
* @param context 预警引擎执行上下文
* @return
*/
public MessageAttachment getSingleEmailMessageAttachment(DynamicObject data, EarlyWarnContext context){
List<byte[]> files = new ArrayList<>();
List<String> fileNames = new ArrayList<>();
MessageAttachment attachment = new MessageAttachment(files, fileNames);
//获取预警数据中包含的附件内容作为邮件中的附件
DynamicObjectCollection attachmentCollection = data.getDynamicObjectCollection("attachmentfield");
for (DynamicObject dynamicObject : attachmentCollection) {
DynamicObject attachmentBaseData = dynamicObject.getDynamicObject("fbasedataid");
String url = attachmentBaseData.getString("url");
String name = attachmentBaseData.getString("name");
try {
InputStream in = FileServiceFactory.getAttachmentFileService().getInputStream(url);
byte[] bytes = IOUtils.toByteArray(in);
files.add(bytes);
fileNames.add(name);
} catch (IOException e) {
e.printStackTrace();
}
}
return attachment;
}
/**
* 构建合并消息邮件发送方式的附件内容(同构建单条消息邮件发送方式的附件内容一样)
* @param context 预警引擎执行上下文
* @return
*/
public MessageAttachment getMergeEmailMessageAttachment(EarlyWarnContext context){
return null;
}
```
## 插件注册
将本文中的自定义消息解析插件和《预警插件——数据源插件》中的自定义数据源插件同时注册到库存通知处理业务预警对象中。
![img](https://vip.kingdee.com/download/010933cfc45ba1ca427dbdf342ff4b398ca5.webp)
## 效果展示
新建预警监控方案,引用库存通知处理业务预警对象。
![0109bd8c5b91b6934b20863bcbbb27e344b0.webp](https://vip.kingdee.com/download/0109bd8c5b91b6934b20863bcbbb27e344b0.webp)
在预警监控方案执行成功之后,可以在消息中心查看到预警信息。
![0109c07baf3a085849c38a36011111a297f6.webp](https://vip.kingdee.com/download/0109c07baf3a085849c38a36011111a297f6.webp)
预警插件——消息解析插件使用说明
为针对不同的业务场景提供定制化的预警功能,平台提供了预警插件机制,使用者可以通过编写插件对预警监控过程进行干预,从而实现使用定制化...
点击下载文档
上一篇:预警插件——数据写出插件使用说明下一篇:预警插件——消息处理插件使用说明
本文2024-09-23 00:38:41发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140798.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章