/**
*@Author cf
*@Description 驳回
* proInstanceId 需要驳回的流程实例id(当前发起节点的流程实例id)
* currTaskKeys 驳回发起的当前节点key 为 act_ru_task 中TASK_DEF_KEY_ 字段的值
* targetKey 目标节点的key 为act_hi_taskinst 中 TASK_DEF_KEY_
**/
public void rollback(String proInstanceId, List<String> currTaskKeys, String targetKey) {
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(proInstanceId)
.moveActivityIdsToSingleActivityId(currTaskKeys, targetKey)
.changeState();
}
使用方式:
/**
*@Author cf
*@Description 跳转指定节点
*@Date 9:48 2019/4/17
* currentTask 当前节点
* targetTaskDefKey 目标节点key
**/
public boolean rollbaskTask(Task currentTask,String targetTaskDefKey){
//跳转到需要回退的节点
List<String> key = new ArrayList<>();
key.add(currentTask.getTaskDefinitionKey());
actService.rollbask(currentTask.getProcessInstanceId(), key, targetTaskDefKey);
}
注意:
1.这个api 并行网关是支持的,也可以从主线跳到支线,但是跳到支线的串行线运行完了之后,网关之后的任务不会走
慎用并行跳转
2.每跳转一次,都会生成新的执行实例id(executionId)
3.flowable还提供了很多种节点跳转的方式,按需求使用哦,其他使用方式请参考上面例子
https://flowable.org/docs/javadocs/org/flowable/engine/runtime/ChangeActivityStateBuilder.html
4.以上仅供参考