在flowable中,可以通过ChangeActivityStateBuilder将一个任务驳回到其所在流程的起点。具体步骤如下:

  1. 获取当前任务的Execution对象:
Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
  1. 获取流程的起点Activity对象:
Activity startEvent = processDefinitionEntity.findActivity("startEventId");
  1. 构建ChangeActivityStateBuilder对象:
ChangeActivityStateBuilder builder = runtimeService.createChangeActivityStateBuilder()
        .processInstanceId(execution.getProcessInstanceId())
        .moveSingleActivityIdToActivityIds(task.getTaskDefinitionKey(), Collections.singletonList(startEvent.getId()));
  1. 执行驳回操作:
builder.changeState();

注意,驳回操作会将当前任务及其之后的所有任务都删除,流程会回到起点重新开始。因此,在执行驳回操作前,需要确保该任务之后的任务均已完成或被删除。

完整代码示例:

Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(task.getProcessDefinitionId());
Activity startEvent = processDefinitionEntity.findActivity("startEventId");

ChangeActivityStateBuilder builder = runtimeService.createChangeActivityStateBuilder()
        .processInstanceId(execution.getProcessInstanceId())
        .moveSingleActivityIdToActivityIds(task.getTaskDefinitionKey(), Collections.singletonList(startEvent.getId()));
builder.changeState();
``
flowable通过ChangeActivityStateBuilder 驳回到起点

原文地址: https://www.cveoy.top/t/topic/e3eJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录