flowable 用java api怎么实现回退到指定节点任务
时间: 2023-06-02 12:01:31 浏览: 171
SpringBoot2.7集成flowable最新版,java工作流服务端实现,解耦设计
使用Flowable的Java API实现回退到指定节点任务需要以下步骤:
1. 获取当前任务的流程实例ID和当前任务的任务定义ID。
2. 使用流程实例ID获取历史流程实例对象。
3. 使用历史流程实例对象获取流程实例的所有活动节点。
4. 遍历所有活动节点,找到目标节点。
5. 使用目标节点的任务定义ID创建一个新的任务。
6. 将当前任务的执行人设置为目标任务的执行人。
7. 将新任务保存到数据库中。
8. 结束当前任务。
以下是实现回退到指定节点任务的Java代码示例:
```
// 获取当前任务的流程实例ID和当前任务的任务定义ID
String processInstanceId = task.getProcessInstanceId();
String taskDefinitionKey = task.getTaskDefinitionKey();
// 使用流程实例ID获取历史流程实例对象
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
// 使用历史流程实例对象获取流程实例的所有活动节点
List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(processInstanceId)
.activityType("userTask")
.unfinished()
.orderByHistoricActivityInstanceStartTime()
.asc()
.list();
// 遍历所有活动节点,找到目标节点
int targetIndex = -1;
for (int i = 0; i < historicActivityInstances.size(); i++) {
HistoricActivityInstance historicActivityInstance = historicActivityInstances.get(i);
if (historicActivityInstance.getActivityId().equals(taskDefinitionKey)) {
targetIndex = i - 1;
break;
}
}
if (targetIndex >= 0) {
// 使用目标节点的任务定义ID创建一个新的任务
String targetTaskDefinitionKey = historicActivityInstances.get(targetIndex).getActivityId();
Task targetTask = taskService.newTask();
targetTask.setAssignee(task.getAssignee());
targetTask.setName(task.getName());
targetTask.setTaskDefinitionKey(targetTaskDefinitionKey);
targetTask.setProcessInstanceId(processInstanceId);
// 将新任务保存到数据库中
taskService.saveTask(targetTask);
// 结束当前任务
taskService.complete(task.getId());
}
```
阅读全文