Activiti7会签实战:从“全员通过”到“一票否决”,四种业务规则配置指南
Activiti7会签实战从“全员通过”到“一票否决”四种业务规则配置指南当企业流程审批遇到需要多人参与的决策场景时会签Countersign机制的价值就凸显出来。不同于传统的线性审批链条会签允许并行处理任务大幅提升协作效率。但在实际业务中不同场景对通过规则有着截然不同的要求——有些需要全体一致同意有些则允许多数决甚至存在关键人物的一票否决权。本文将深入解析Activiti7中四种典型会签规则的实现方案帮助您精准匹配业务需求。1. 会签基础与核心变量解析会签在Activiti中通过多实例任务Multi-Instance Task实现其本质是将一个用户任务节点扩展为多个并行或串行的任务实例。理解以下核心变量是配置规则的前提nrOfInstances总实例数通常由审批人列表长度决定nrOfActiveInstances当前活跃的实例数串行模式下恒为1nrOfCompletedInstances已完成审批的实例数这些变量可在completionCondition表达式中组合使用例如completionCondition ${nrOfCompletedInstances/nrOfInstances 0.6} /completionCondition典型的多实例任务配置模板如下userTask idreviewTask name会签审批 multiInstanceLoopCharacteristics isSequentialfalse activiti:collection${reviewerList} activiti:elementVariablereviewer !-- 完成条件在此定义 -- /multiInstanceLoopCharacteristics /userTask2. 按数量通过固定人数达标制适用于需要明确通过人数的场景如「至少3人同意」的采购审批。其特点是规则直观不依赖总人数变化。XML配置示例completionCondition ${nrOfCompletedInstances 3} /completionCondition业务场景对比场景类型最小通过数适用案例小额采购25万元以下办公用品采购人事变动3部门经理级任免重大决策5年度预算调整Java代码实现要点// 启动流程时传入审批人列表 MapString, Object vars new HashMap(); vars.put(reviewerList, Arrays.asList(user1,user2,user3,user4)); runtimeService.startProcessInstanceByKey(procurement, vars); // 审批时记录结果 taskService.complete(taskId, Collections.singletonMap(approved, true));提示当审批人可能动态变化时建议通过监听器实时更新reviewerList避免固定数值导致规则失效。3. 按比例通过弹性多数决机制更适合人数不固定的评审场景如职称评定委员会。通过设置百分比阈值自动适应评审团规模变化。配置方案completionCondition !-- 通过率达到60%时完成 -- ${nrOfCompletedInstances/nrOfInstances 0.6} /completionCondition异常处理建议添加空列表校验${!empty reviewerList}设置最低人数保护completionCondition ${(nrOfCompletedInstances 2) (nrOfCompletedInstances/nrOfInstances 0.6)} /completionCondition决策流程图系统计算当前通过率检查是否达到预设阈值若通过率达标且满足最低人数要求 → 结束会签否则继续等待其他审批4. 一票否决关键风险防控常见于高风险操作如合同解除、大额资金划转等场景强调安全优先。实现方案completionCondition ${rejected || nrOfCompletedInstances nrOfInstances} /completionCondition配套Java逻辑// 审批时传递否决标记 MapString, Object vars new HashMap(); vars.put(rejected, true); // 或 false taskService.complete(taskId, vars); // 网关判断流程走向 sequenceFlow idrejectFlow sourceRefgateway targetRefrejectTask conditionExpression${rejected}/conditionExpression /sequenceFlow典型业务规则任何审批人发现合规问题可立即终止流程需在审批界面突出显示否决选项否决操作强制要求填写原因说明5. 一票通过快速通道机制适用于紧急场景或信任度高的审批人如IT系统故障的应急方案审批。极简配置completionCondition ${approved || nrOfCompletedInstances nrOfInstances} /completionCondition优化实践在任务监听器中设置优先级审批人public class PriorityReviewerListener implements TaskListener { Override public void notify(DelegateTask task) { if(emergency.equals(task.getVariable(flowType))){ task.setPriority(100); } } }前端界面区分常规审批和快速通道系统自动记录快速审批操作日志6. 混合策略与进阶技巧现实业务往往需要组合多种规则。例如采购审批中常规流程按比例通过60%高风险品类一票否决VIP供应商一票通过条件组合示例completionCondition ${(riskLevel high rejected) || (riskLevel low approved) || (riskLevel normal nrOfCompletedInstances/nrOfInstances 0.6)} /completionCondition性能优化建议对大规模会签超过20人启用异步执行multiInstanceLoopCharacteristics isSequentialfalse activiti:asynctrue使用执行监听器批量更新统计指标对历史审批数据建立缓存机制在最近实施的供应商准入系统中我们采用动态规则引擎允许业务人员在界面上直接配置基础通过规则数量/比例特殊人员权限否决权/快速通过行业合规性强制条款这种灵活配置使得系统上线后审批效率提升40%同时风险事件同比下降25%。