1. 概要

在流程执行过程中,比如有这样的情况,相邻两个节点的的执行人相同,这个时候审批人不希望审批两次,因此就有了跳过的需求,当然这只不过是一种常用的场景,可能还有其他的场景。因此 我们将跳过定义成了一个接口,用户可以通过实现接口实现一些特定的场景跳过。

在平台中默认提供了4种策略:

1.相邻节点相同执行人跳过。
2.无条件跳过
这种情况适合用于做测试,比如点击开始时,一路执行到结束。
3.已审批人跳过
这种情况是,比如我在之前审批过,这个时候就不需要再审批了。
4.根据条件脚本跳过
这种情况运行用户执行脚本,通过脚本返回值,判断是否应该跳过。

2. 实现新的策略

策略接口:

com.redxun.bpm.core.ext.skip.ISkipCondition

我们需要实现这个接口,比如 条件脚本跳过策略

  1. @Component
  2. public class FormVarsCondition implements ISkipCondition {
  3. @Resource
  4. ProcessScriptEngine processScriptEngine;
  5. @Resource
  6. RuntimeService runtimeService;
  7. @Override
  8. public SkipType getType() {
  9. return new SkipType("formVars","根据条件判断");
  10. }
  11. @Override
  12. public boolean canSkip(BpmTask bpmTask, String config) {
  13. if(StringUtils.isEmpty(config)){
  14. return false;
  15. }
  16. String actInstId=bpmTask.getActInstId();
  17. Map<String,Object> vars= runtimeService.getVariables(actInstId);
  18. Map<String, Object> conextData = ActivitiUtil.getConextData(vars);
  19. conextData.put("bpmTask",bpmTask);
  20. Object obj= processScriptEngine.exeScript(config,conextData);
  21. if(obj instanceof Boolean && (Boolean)obj){
  22. return true;
  23. }
  24. return false;
  25. }
  26. }

这里需要增加@Component 注解。实现接口后,我们可以在流程设计界面进行配置。

3. 条件策略脚本的实现

我们实现了一种条件策略的脚本,可以支持用户编写脚本来实现一些特殊的请求。需要注意的是脚本的返回值是布尔值。

上下文变量:

变量 说明
vars 流程变量
cmd IExecutionCmd 对象实例
bo别名 bo别名代表了表数据对象,比如我们需要取表单的某个数据,可以使用 bo别名.days ,这个bo别名可以有多个,这个是根据 设置业务对象决定的。
bpmTask 当前任务的BpmTask的对象实例
文档更新时间: 2020-12-12 15:35   作者:zyg