1. 概要
在流程执行过程中,比如有这样的情况,相邻两个节点的的执行人相同,这个时候审批人不希望审批两次,因此就有了跳过的需求,当然这只不过是一种常用的场景,可能还有其他的场景。因此 我们将跳过定义成了一个接口,用户可以通过实现接口实现一些特定的场景跳过。
在平台中默认提供了4种策略:
1.相邻节点相同执行人跳过。
2.无条件跳过
这种情况适合用于做测试,比如点击开始时,一路执行到结束。
3.已审批人跳过
这种情况是,比如我在之前审批过,这个时候就不需要再审批了。
4.根据条件脚本跳过
这种情况运行用户执行脚本,通过脚本返回值,判断是否应该跳过。
2. 实现新的策略
策略接口:
com.redxun.bpm.core.ext.skip.ISkipCondition
我们需要实现这个接口,比如 条件脚本跳过策略
@Component
public class FormVarsCondition implements ISkipCondition {
@Resource
ProcessScriptEngine processScriptEngine;
@Resource
RuntimeService runtimeService;
@Override
public SkipType getType() {
return new SkipType("formVars","根据条件判断");
}
@Override
public boolean canSkip(BpmTask bpmTask, String config) {
if(StringUtils.isEmpty(config)){
return false;
}
String actInstId=bpmTask.getActInstId();
Map<String,Object> vars= runtimeService.getVariables(actInstId);
Map<String, Object> conextData = ActivitiUtil.getConextData(vars);
conextData.put("bpmTask",bpmTask);
Object obj= processScriptEngine.exeScript(config,conextData);
if(obj instanceof Boolean && (Boolean)obj){
return true;
}
return false;
}
}
这里需要增加@Component
注解。实现接口后,我们可以在流程设计界面进行配置。
3. 条件策略脚本的实现
我们实现了一种条件策略的脚本,可以支持用户编写脚本来实现一些特殊的请求。需要注意的是脚本的返回值是布尔值。
上下文变量:
变量 | 说明 |
---|---|
vars | 流程变量 |
cmd | IExecutionCmd 对象实例 |
bo别名 | bo别名代表了表数据对象,比如我们需要取表单的某个数据,可以使用 bo别名.days ,这个bo别名可以有多个,这个是根据 设置业务对象决定的。 |
bpmTask | 当前任务的BpmTask的对象实例 |
文档更新时间: 2022-01-20 14:53 作者:zyg