预警插件——消息处理插件使用说明
为针对不同的业务场景提供定制化的预警功能,平台提供了预警插件机制,使用者可以通过编写插件对预警监控过程进行干预,从而实现使用定制化预警功能。下图为预警平台插件设置入口在新增/编辑业务预警对象页面。
![0109d30c339b5e62424096e1901ae4cb9d03.webp](https://vip.kingdee.com/download/0109d30c339b5e62424096e1901ae4cb9d03.webp)
预警平台将预警消息发送至消息中心后,默认情况下只在消息中心的消息预警中显示了一条预警消息数据。我们想对这条消息进行一些处理但受限于目前消息中心的处理机制,目前只提供了基于URL的跳转实现方式,通过URL将所需参数携带至相关的页面,这时候可以自定义消息处理插件来生成快速跳转链接。
## 业务场景
某企业需要对商品库存进行低库存的预警,发送的预警消息根据实际情况生成,同时在消息中为库管提供快速处理链接。
## 实现方案
编写预警消息处理插件实现IEarlyWarnMessageHandler接口,实现接口方法,在接口中可以通过上下文获取到相关的数据,构建自己想要的URL即可。
## 代码示例
```
/**
* 下面是以发送预警消息的单据生成的快速处理链接的完整实现方式
*/
public class EarlyWarnMessageHandlerDemo implements IEarlyWarnMessageHandler {
private final Log logger = LogFactory.getLog(DefaultWarnMessageHandler.class);
private String clientPath = "";//客户端地址
private String formId = "";//pc端表单标识
private String mobFormId = "";//移动端表单标识
public EarlyWarnMessageHandlerDemo(EarlyWarnContext context) {
RequestContext ctx = RequestContext.get();
this.clientPath = UrlService.getDomainContextUrlByTenantCode(ctx.getTenantCode());//拿到完整的客户端网址
this.formId = context.getEarlyWarn().getDataSourceId();
//获取移动端标识
if(StringUtils.isNotEmpty(formId)){
try{
ControlAp<?> controlAp = ((FormMetadata) MetadataDao.readRuntimeMeta(MetadataDao.getIdByNumber(formId, MetaCategory.Form), MetaCategory.Form)).getItems().get(0);
if (controlAp instanceof BillFormAp){
BillFormAp billFormAp = (BillFormAp)controlAp;
FormMetadata mobMeta = billFormAp.getMobMeta();
String tempMobFormId = mobMeta.getKey();
//如果拿到的移动端标识和基模板的移动端标识一致,认为用户未配置移动表单
if(!StringUtils.equals(tempMobFormId,"bos_billtpl_mob")){
mobFormId = tempMobFormId;
}
}
}catch (Exception e){
logger.error("GETMOB_ERROR : " + e);
}
}
}
/**
* 自定义选择预警内容时发送单条消息的快速处理链接
* @param data 数据
* @param context 预警引擎执行上下文
* @return
*/
@Override
public EarlyWarnMessageInfo singleMessageBuilder(DynamicObject data, EarlyWarnContext context) {
if (StringUtils.isNotEmpty(clientPath) && StringUtils.isNotEmpty(formId) && data != null) {
EarlyWarnMessageInfo messageInfo = new EarlyWarnMessageInfo();
String pkId = data.get("id").toString();//对应单据的内码
StringBuilder contentUrl = new StringBuilder(clientPath);
contentUrl = contentUrl.append("?formId=").append(formId).append("&pkId=").append(pkId);//pc端跳转单据路径
// String contentUrl = clientPath+"?formId="+formId+"&pkId="+pkId;//pc端跳转单据路径
//如果用户未配置移动表单,则不生成移动端url
if (StringUtils.isNotEmpty(mobFormId)) {
StringBuilder mobContentUrl = new StringBuilder(clientPath);
if (!clientPath.endsWith("/")) {
mobContentUrl = mobContentUrl.append("/");
}
mobContentUrl = mobContentUrl.append("mobile.html?form=").append(mobFormId).append("&pkId=").append(pkId);//移动端跳转单据路径
// String mobContentUrl = clientPath + "mobile.html?form=" + mobFormId + "&pkId=" + pkId;//移动端跳转单据路径
messageInfo.setMobContentUrl(mobContentUrl.toString());
}
messageInfo.setContentUrl(contentUrl.toString());
return messageInfo;
}
return null;
}
/**
* 自定义选择合并消息时发生的快速处理的链接
* @param context 预警引擎执行上下文
* @return
*/
@Override
public EarlyWarnMessageInfo mergeMessageBuilder(EarlyWarnContext context) {
return null;
}
}
```
## 插件注册
![消息处理.webp](/download/0100f651de8ed4b64fd0b70306acd88d31bb.webp)
## 效果展示
![img](https://vip.kingdee.com/download/0109d4ed663b401b4cecb323b7a728a509b1.webp)
预警插件——消息处理插件使用说明
为针对不同的业务场景提供定制化的预警功能,平台提供了预警插件机制,使用者可以通过编写插件对预警监控过程进行干预,从而实现使用定制化...
点击下载文档
本文2024-09-23 00:38:42发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140799.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章