关于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
相关产品推荐
相关产品推荐

