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

预警平台提供了默认单据、基础资料条件配置页面,该配置受限于选择的数据源。比如当我们需要处理多个数据源时,这种情况通过上述默认的配置方式比较难以处理,因此就需要平台提供的自定义数据源插件机制来处理多数据源协同预警的场景。自定义数据源拥有完整的功能,可以控制到整个预警数据取数过程。
## 业务场景
某企业需要对商品库存进行低库存的预警,若存在一段时间仍未处理的低库存商品时,触发预警。
## 实现方案
编写数据源插件,可以继承至系统提供的默认单据数据源DefaultEarlyWarnBillDataSource或实现自定义数据源接口IEarlyWarnDataSource,重写getData()方法,合并自定义过滤条件与页面配置的通用过滤条件。
## 代码示例
```
/**
*在这里,我们要先找出未处理(status=0)的商品,商品处理状态信息存储在stock_status_demo单据中。我们还需要通过工号关联用户信息表stock_user,根据用户id
*把处理通知发送给对应的库管。
*在这个场景中,我们需要处理多个数据源,此时就要用到自定义数据源插件来处理多数据源协同预警的场景。自定义数据源拥有完整的功能,可以控制到整个预警数据取数过
*程。
*
*/
public class DataSourceDemo implements IEarlyWarnDataSource {
/**
* 构建过滤数据
* @param dataSource 数据源
* @param filterCondition 过滤条件
* @param context 引擎执行上下文
* @return 过滤条件
*/
@Override
public List<QFilter> buildFilter(String dataSource, FilterCondition filterCondition, EarlyWarnContext context) {
List<QFilter> statusFilters = new ArrayList<>();
statusFilters.add(new QFilter("status1","=","0"))
return statusFilters;
}
/**
* 获取数据
* @param dataSource 数据源
* @param filters 过滤条件
* @param context 引擎执行上下文
* @return 过滤得到的数据
*/
@Override
public DynamicObjectCollection getData(String dataSource, List<QFilter> filters, EarlyWarnContext context) {
DynamicObject[] goods = BusinessDataServiceHelper.load("stock_status_demo","operatorid", new QFilter[]{filters.get(0)});
if (goods == null || goods.length == 0){
return new DynamicObjectCollection();
}
List<Long> idList = new ArrayList<>();