flowable如何根据BPMN模型获取当前任务的上一级任务节点
时间: 2024-05-08 12:21:53 浏览: 276
在Flowable中,可以使用流程引擎提供的API获取当前任务的上一级任务节点。具体步骤如下:
1. 获取当前任务的ID,可以使用TaskService提供的方法`getCurrentTaskId()`获取。
2. 使用TaskService提供的方法`createTaskQuery().taskId(taskId).singleResult()`获取当前任务对象。
3. 从当前任务对象中获取流程实例ID,即`processInstanceId`。
4. 使用HistoryService提供的方法`createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).activityType("userTask").finished().orderByHistoricActivityInstanceEndTime().desc().list()`获取当前流程实例中所有已完成的用户任务节点。
5. 遍历已完成的用户任务节点,找到当前任务的上一级任务节点。可以通过比较任务节点的结束时间来确定上一级任务节点。
6. 如果找到了上一级任务节点,可以使用其ID启动一个新的任务。
示例代码如下:
```
String taskId = taskService.getCurrentTaskId();
Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstanceId = currentTask.getProcessInstanceId();
List<HistoricActivityInstance> activityInstances = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).activityType("userTask").finished().orderByHistoricActivityInstanceEndTime().desc().list();
for (HistoricActivityInstance activityInstance : activityInstances) {
// 找到当前任务的上一级任务节点
if (activityInstance.getEndTime().before(currentTask.getCreateTime())) {
String taskDefinitionKey = activityInstance.getActivityId();
Task previousTask = taskService.newTask();
previousTask.setTaskDefinitionKey(taskDefinitionKey);
previousTask.setAssignee("assignee");
previousTask.setDueDate(new Date());
taskService.saveTask(previousTask);
break;
}
}
```
需要注意的是,以上代码仅适用于顺序流程。如果流程中存在并行网关等情况,需要根据具体流程在代码中进行适当的处理。
阅读全文