预警插件——消息解析插件使用说明

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

预警插件——消息解析插件使用说明

为针对不同的业务场景提供定制化的预警功能,平台提供了预警插件机制,使用者可以通过编写插件对预警监控过程进行干预,从而实现使用定制化预警功能。下图为预警平台插件设置入口在新增/编辑业务预警对象页面。 ![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)

预警插件——消息解析插件使用说明

为针对不同的业务场景提供定制化的预警功能,平台提供了预警插件机制,使用者可以通过编写插件对预警监控过程进行干预,从而实现使用定制化...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息