6.4.0 新增加了驳回的方式,真是对中国式流程的一种福音呀,感谢flowable创始人。
再也不为开发驳回流程发愁了,网上那些视频和修改源码真的是demo级别的,不能商业用。
只有心如流水的学习才是永远的发电机,不要幻想别人能给把系统都给你做好了。
任何节点都可以跳转
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId)
.moveActivityIdsToSingleActivityId("当前的任务的节点id", "需要跳转的目标节点")
.changeState();
当然有很多方法,大家可以去找一下ChangeActivityStateBuilder这里类。
1. 直接上代码吧,从来都是干货,不隐藏,哈哈。
public ReturnVo<String> backToStep(BackVo backVo) throws Exception {
ReturnVo<String> returnVo = new ReturnVo<>(FlowConstant.SUCCESS, "OK");
Task task = taskService.createTaskQuery().taskId(backVo.getTaskId()).singleResult();
String processInstanceId = task.getProcessInstanceId();
FlowElement distActivity = processDefinitionUtils.findFlowElementById(task.getProcessDefinitionId(), backVo.getDistFlowElementId());
//1. 保存任务信息
task.setAssignee(backVo.getUserCode());
taskService.saveTask(task);
//2. 如果上一个节点是提交者的话要处理一下
if (FlowConstant.FLOW_SUBMITTER.equals(distActivity.getName())) {
//查找发起人 设置到变量中,以便驳回到提起人的时候能留在提交人这个节点
ExtendProcinst extendProcinst = this.extendProcinstService.findExtendProcinstByProcessInstanceId(processInstanceId);
String creator = null;
if (extendProcinst != null) {
creator = extendProcinst.getCreator();
if (StringUtils.isBlank(creator)) {
creator = extendProcinst.getCurrentUserCode();
}
} else {
ExtendHisprocinst extendHisprocinst = extendHisprocinstService.getExtendHisprocinstByProcessInstanceId(processInstanceId);
creator = extendHisprocinst.getCreator();
if (StringUtils.isBlank(creator)) {
creator = extendHisprocinst.getCurrentUserCode();
}
}
if (StringUtils.isNotBlank(creator)) {
runtimeService.setVariable(processInstanceId, FlowConstant.FLOW_SUBMITTER_VAR, creator);
}
}
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
List<String> currentActivityIds = new ArrayList<>();
tasks.forEach(t -> currentActivityIds.add(t.getTaskDefinitionKey()));
//3. 删除节点信息
if (!(distActivity instanceof EndEvent)) {
this.deleteHisActivities((Activity) distActivity, processInstanceId);
}
//4. 添加审批意见和修改流程状态
this.addCommentAndUpdateProcessStatus(backVo, processInstanceId);
//5.执行驳回操作
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId)
.moveActivityIdsToSingleActivityId(currentActivityIds, backVo.getDistFlowElementId())
.changeState();
return returnVo;
}
2.经测试 多实例节点,并行网关,判断网关都没有问题,甚至是子流程的一种节点跳转都有相应的方法
具体怎么使用可以去看官方的测试用例

介绍了Flowable 6.4.0版本中新增的驳回功能,该功能允许在任何节点进行跳转,极大简化了中国式流程的开发工作。文章提供了实际代码示例,展示了如何实现驳回操作,包括节点信息的保存与删除、审批意见的添加以及流程状态的修改。测试表明,多实例节点、并行网关、判断网关及子流程节点跳转均能有效处理。
2237

被折叠的 条评论
为什么被折叠?



