用java代码怎么实现flowable退回
时间: 2023-08-17 16:08:06 浏览: 64
在 Flowable 中,将任务退回可以通过以下步骤实现:
1. 获取当前任务的历史记录
```java
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
.taskId(taskId).list();
```
2. 根据历史记录获取该任务之前的任务
```java
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
.unfinished().list();
```
3. 获取当前任务的变量
```java
Map<String, Object> variables = taskService.getVariables(taskId);
```
4. 完成当前任务
```java
taskService.complete(taskId, variables);
```
5. 获取退回任务的定义并设置相关变量
```java
TaskDefinition taskDefinition = repositoryService.getTaskDefinition(previousTask.getTaskDefinitionKey());
Map<String, Object> variables = new HashMap<>();
variables.put("assignee", assignee);
variables.put("previousAssignee", previousTask.getAssignee());
```
6. 创建并提交退回任务
```java
Task task = taskService.newTask();
task.setAssignee(assignee);
task.setParentTaskId(previousTask.getId());
task.setTaskDefinitionKey(previousTask.getTaskDefinitionKey());
task.setProcessInstanceId(processInstanceId);
task.setName(taskDefinition.getNameExpression().getExpressionText());
task.setDescription(taskDefinition.getDescriptionExpression().getExpressionText());
taskService.saveTask(task);
taskService.complete(task.getId(), variables);
```
完整代码示例:
```java
// 获取当前任务的历史记录
List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
.taskId(taskId).list();
if (historicTaskInstances.size() == 1) {
// 当前任务是第一个任务,不能退回
throw new RuntimeException("The first task cannot be returned.");
}
// 根据历史记录获取该任务之前的任务
HistoricTaskInstance previousTask = historicTaskInstances.get(historicTaskInstances.size() - 2);
// 获取当前任务的变量
Map<String, Object> variables = taskService.getVariables(taskId);
// 完成当前任务
taskService.complete(taskId, variables);
// 获取退回任务的定义并设置相关变量
TaskDefinition taskDefinition = repositoryService.getTaskDefinition(previousTask.getTaskDefinitionKey());
Map<String, Object> variables = new HashMap<>();
variables.put("assignee", assignee);
variables.put("previousAssignee", previousTask.getAssignee());
// 创建并提交退回任务
Task task = taskService.newTask();
task.setAssignee(assignee);
task.setParentTaskId(previousTask.getId());
task.setTaskDefinitionKey(previousTask.getTaskDefinitionKey());
task.setProcessInstanceId(processInstanceId);
task.setName(taskDefinition.getNameExpression().getExpressionText());
task.setDescription(taskDefinition.getDescriptionExpression().getExpressionText());
taskService.saveTask(task);
taskService.complete(task.getId(), variables);
```