用java写一个flowable的完成任务
时间: 2024-03-09 16:18:12 浏览: 62
以下是使用Java编写完成Flowable任务的示例代码:
```java
// 创建Flowable引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 使用任务ID查询任务
Task task = processEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult();
// 完成任务
processEngine.getTaskService().complete(task.getId());
```
在上面的代码中,我们首先创建了一个Flowable引擎对象。然后,我们使用任务ID查询任务,并将查询结果存储在一个任务对象中。最后,我们使用该任务对象的ID来完成任务。
请注意,这只是一个简单的示例代码,实际情况可能会更加复杂,具体取决于您的业务需求。
相关问题
用java代码怎么实现flowable驳回
Flowable 是一个 Java 中的 BPMN (Business Process Model and Notation) 框架,提供了丰富的 API 来实现流程控制。在 Flowable 中,驳回操作通常是通过设置任务的候选人或候选组来实现的。
以下是 Java 代码示例,演示如何使用 Flowable API 驳回任务:
```java
// 获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取当前任务
Task currentTask = processEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult();
// 取消当前任务
processEngine.getTaskService().deleteTask(currentTask.getId(), true);
// 创建新的任务
Task newTask = processEngine.getTaskService().newTask();
newTask.setAssignee(assignee); // 设置新任务的候选人
newTask.setName(taskName); // 设置新任务的名称
newTask.setProcessDefinitionId(currentTask.getProcessDefinitionId());
newTask.setProcessInstanceId(currentTask.getProcessInstanceId());
// 保存新任务
processEngine.getTaskService().saveTask(newTask);
// 完成新任务
processEngine.getTaskService().complete(newTask.getId());
```
在上面的代码中,我们首先获取当前任务,然后取消当前任务。接下来,我们创建一个新的任务,设置新任务的候选人、名称和流程定义 ID 等信息,并将其保存。最后,我们使用 `complete` 方法来完成新任务。由于新任务的候选人已经设置,所以该任务会被分配给该候选人,从而实现了驳回操作。
用java代码怎么实现flowable退回
在 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);
```
阅读全文