You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Flowable的三类技术问题咨询(无需修改BPMN XML及重启服务)

Flowable 技术问题解答(无需修改BPMN XML/重启服务器)

1. 是否可以更换流程负责人?

可以。Flowable 提供 TaskService API 直接修改任务负责人信息,完全不需要修改BPMN文件或重启服务:

  • 若任务已分配给特定用户,调用 taskService.setAssignee(taskId, "Roy") 即可直接替换负责人;
  • 若任务是候选组/候选用户模式(如你的代码中用taskCandidateGroup查询的场景),可通过 taskService.removeCandidateUser(taskId, "Ken") 和 taskService.addCandidateUser(taskId, "Roy") 调整候选范围,也可直接用setAssignee分配给指定用户。

可在你的ArticleWorkflowService中新增方法实现:

@Transactional
public void changeTaskAssignee(String taskId, String newAssignee) {
    taskService.setAssignee(taskId, newAssignee);
}

2. 是否可以在不修改BPMN XML的情况下添加Service Task?

可以针对正在运行的流程实例动态添加Service Task,Flowable的流程实例修改API支持该操作,无需修改原始BPMN或重启服务:
通过RuntimeService的createProcessInstanceModification构建器,可指定在某个活动节点前后插入新的Service Task,并绑定执行逻辑(比如指定Spring容器中的JavaDelegate Bean)。

示例实现(可添加到你的ArticleWorkflowService):

@Transactional
public void addServiceTaskToProcess(String processInstanceId, String targetActivityId) {
    runtimeService.createProcessInstanceModification(processInstanceId)
            .startBeforeActivity(targetActivityId) // 在指定节点前插入任务
            .addServiceTask()
            .id("dynamic-service-task")
            .name("动态新增服务任务")
            .taskDelegateExpression("${yourServiceDelegateBean}") // 绑定自定义逻辑Bean
            .done();
}

注:该方式仅对当前运行的流程实例生效;若要对所有新启动的流程生效,可结合流程引擎解析拦截器实现,同样无需修改原始BPMN文件。

3. 流程驳回重置后,历史记录是否会累积?

会累积。Flowable的历史数据是全量持久化的,所有流程操作(包括审批通过、驳回、回退)都会被记录到历史表(如ACT_HI_ACTINST、ACT_HI_TASKINST)中。
比如你描述的场景:Tom审批通过→Ken审批通过→Ben驳回回退到Tom,Tom、Ken的审批记录,Ben的驳回操作记录都会完整保留;当Tom再次处理该任务时,会新增一条新的历史活动记录。
你的代码中已实现getHistory()方法,调用后可获取包含所有操作的历史活动实例列表。


内容的提问来源于stack exchange,提问作者PSK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:20:22