告别低效审批:用Flowable多实例任务重构团队会签流程
每次看到行政同事在群里@所有人收集报销签字,或是项目经理手动统计项目评审意见时,我都忍不住想——这都2023年了,为什么还在用石器时代的方式处理团队决策?上周市场部的一个紧急预算审批,因为三个负责人出差时差不同,光收集签字就拖了整整四天。这种场景下,Flowable的多实例任务功能就像是为团队协作量身定制的自动化开关。
1. 解密多实例任务的核心机制
多实例任务(Multi-Instance Task)本质上是BPMN规范中的循环结构,Flowable通过multiInstanceLoopCharacteristics元素将其实现为可配置的会签引擎。与常见的串行审批不同,它的精妙之处在于能动态创建多个并行或串行的任务实例,并根据预设条件智能判断流程走向。
核心参数三剑客:
collection:注入参与者集合的表达式(如${userList})elementVariable:迭代时的临时变量名(如assignee)completionCondition:决定何时结束循环的EL表达式
<userTask id="signTask" name="会签审批"> <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="${approvers}" flowable:elementVariable="approver"> <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.6}</completionCondition> </multiInstanceLoopCharacteristics> </userTask>这个配置片段实现了一个典型的"60%通过率"会签:当审批人列表中有超过60%的成员完成任务时,流程自动进入下一环节。nrOfCompletedInstances和nrOfInstances是Flowable自动注入的内置变量,实时反映任务完成状态。
2. 四种会签策略的实战配置
2.1 绝对多数决:按比例通过
市场活动方案评审往往需要跨部门共识,但不必全员同意。以下配置实现"三分之二通过"规则:
<completionCondition> ${nrOfCompletedInstances/nrOfInstances >= 0.666} </completionCondition>提示:建议在业务变量中定义阈值(如
passRate=0.666),通过${nrOfCompletedInstances/nrOfInstances >= passRate}引用,提升可维护性
2.2 安全第一:一票否决制
适用于财务风控等敏感场景,任一反对即终止流程:
<completionCondition> ${signResult == 'reject' || nrOfCompletedInstances == nrOfInstances} </completionCondition>需要在任务完成时注入signResult变量:
taskService.complete(taskId, Variables.putValue("signResult", "reject"));2.3 快速通道:一票通过机制
紧急采购等场景下,首个同意的审批即可放行:
<completionCondition> ${signResult == 'approve' || nrOfCompletedInstances == nrOfInstances} </completionCondition>2.4 定量达标:固定数量通过
适合需要最少通过人数的场景,如专家评审:
<completionCondition> ${nrOfCompletedInstances >= 3} </completionCondition>3. 动态参与者列表的高级玩法
硬编码审批人列表显然不够灵活,Flowable支持通过表达式动态生成参与者:
// 根据部门ID实时查询审批链 List<String> approvers = departmentService.getApprovers(deptId); runtimeService.startProcessInstanceById( processDefinitionId, Variables.putValue("approvers", approvers) );更复杂的场景可以结合LDAP或OA系统:
<multiInstanceLoopCharacteristics flowable:collection="${ldapService.queryUsers('finance-approvers')}" ... />4. 会签数据的可视化追踪
传统的微信群审批最致命的问题是决策过程不可追溯。Flowable天然提供完整的审计日志:
-- 查询会签任务历史 SELECT * FROM act_hi_taskinst WHERE PROC_INST_ID_ = '流程实例ID' ORDER BY START_TIME_ DESC; -- 获取审批意见 SELECT * FROM act_hi_comment WHERE TASK_ID_ IN ( SELECT ID_ FROM act_hi_taskinst WHERE PROC_INST_ID_ = '流程实例ID' );对于需要深度分析的情况,可以扩展历史记录:
// 自定义审批意见记录 taskService.addComment(taskId, processInstanceId, "REJECT", "预算超出部门季度限额");5. 避坑指南:会签实践中的六个关键点
并行vs串行选择:
isSequential="false"适合无依赖关系的并行审批isSequential="true"适用于需要依次审批的场景(如层级审批)
集合变量空值处理:
<completionCondition> ${empty approvers || nrOfCompletedInstances == nrOfInstances} </completionCondition>异步任务超时控制:
<multiInstanceLoopCharacteristics flowable:async="true" flowable:asyncLeave="true"> <extensionElements> <flowable:failedJobRetryTimeCycle>R3/PT1H</flowable:failedJobRetryTimeCycle> </extensionElements> </multiInstanceLoopCharacteristics>会签任务委派处理:
// 临时转交审批权 taskService.delegateTask(taskId, "代理人ID");多条件组合判断:
<completionCondition> ${(nrOfCompletedInstances >= 2) && (nrOfApproved/nrOfInstances >= 0.5)} </completionCondition>性能优化建议:
- 超过50人的会签建议启用异步执行
- 频繁使用的审批人列表建议缓存
上周帮财务部落地会签系统后,他们的月度报销处理时间从平均5.8天缩短到1.2天。技术负责人最惊喜的不是效率提升,而是突然能清晰看到"哪些环节卡住了流程"——这正是自动化流程相比微信群接龙的决定性优势。