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

预警平台将预警消息发送至消息中心后,默认情况下只在消息中心的消息预警中显示了一条预警消息数据。我们想对这条消息进行一些处理但受限于目前消息中心的处理机制,目前只提供了基于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) {