Flowable的ChangeActivityStateBuilder可以用来驳回到任意的节点。具体步骤如下:

  1. 获取当前流程实例的历史节点信息
List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery()
            .processInstanceId(processInstanceId) // 流程实例ID
            .orderByHistoricActivityInstanceStartTime()
            .asc()
            .list();
  1. 根据历史节点信息,选择需要驳回的目标节点
String targetActivityId = null;
for (int i = historicActivityInstanceList.size() - 1; i >= 0; i--) {
    HistoricActivityInstance historicActivityInstance = historicActivityInstanceList.get(i);
    if (historicActivityInstance.getActivityType().equals("userTask")) {
        targetActivityId = historicActivityInstance.getActivityId();
        break;
    }
}

在这里,我们选择最近的一个userTask节点作为目标节点。

  1. 根据目标节点,创建ChangeActivityStateBuilder,并设置驳回的目标节点
ChangeActivityStateBuilder changeActivityStateBuilder = runtimeService.createChangeActivityStateBuilder()
            .processInstanceId(processInstanceId)
            .moveActivityIdTo(taskId, targetActivityId);

在这里,我们使用了moveActivityIdTo方法,将当前节点的任务移动到目标节点。需要注意的是,taskId是当前节点的任务ID。

  1. 完成流程实例的驳回操作
changeActivityStateBuilder.changeState();

最后,调用changeState方法完成驳回操作

flowable通过ChangeActivityStateBuilder 驳回到任意的节点

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

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