2. 流程设计器进阶:动态表单设计、条件分支逻辑、会签与或签配置、子流程调用
好,咱们接着聊流程设计器。上一章我们把基础操作过了一遍,今天要聊的才是真正拉开差距的地方。说白了,很多OA系统用着用着就卡住了,问题往往就出在表单设计太死、分支逻辑太简单、多人审批搞不清楚、子流程不会复用。
我个人习惯把流程设计器分成四个进阶能力:动态表单、条件分支、会签或签、子流程。这四个点你吃透了,基本上企业里90%的复杂审批场景都能搞定。
2.1 动态表单设计:让表单跟着流程走
先说说动态表单。你想想看,一个采购审批单,普通员工填的和部门经理填的,字段能一样吗?当然不一样。普通员工只需要填申请金额、事由,经理可能还要填预算科目、成本中心。
什么是动态表单? 就是表单的字段、布局、校验规则,可以根据流程节点的不同而变化。不是一张表单打天下,而是「一流程多表单」。
核心思路: 每个流程节点绑定独立的表单视图。节点A显示字段1、2、3,节点B显示字段4、5、6,节点C显示全部字段但只读。
我在项目中遇到过最典型的场景:请假流程。员工提交时只需要填「请假类型」「开始时间」「结束时间」「事由」。但到了部门经理审批时,需要看到「当前团队人力情况」「工作交接人」。到了HR备案时,又需要看到「年假余额」「考勤周期」。你看,同一个流程,三个节点,三个不同的表单视图。
实现方式其实不复杂,我一般推荐两种做法:
- 字段权限控制:表单里所有字段都定义好,但每个节点可以设置「可见」「可编辑」「必填」「隐藏」。
- 独立表单绑定:每个节点绑定一个独立的表单模板,节点流转时自动切换表单。
我个人更倾向第二种,因为维护起来更清晰。第一种如果字段多了,权限矩阵会变得非常复杂,容易出bug。
小技巧: 动态表单的字段命名一定要规范。我习惯用「模块_业务_字段名」的格式,比如 leave_duration_days。这样后续做条件分支、数据统计时,一眼就能看懂。
2.2 条件分支逻辑:别让流程走冤枉路
条件分支,说白了就是「如果...那么...否则...」。但很多人在设计时容易犯一个错误:把所有条件都堆在一个节点上。
为什么会这样?因为觉得「省事」。但实际跑起来,你会发现流程变得极其难调试。我曾经接手过一个客户的流程,一个条件节点上挂了12个分支,每个分支还有嵌套条件。结果每次流程卡住,排查问题要花半天。
我的建议是:条件分支要「扁平化」。
- 能用2个分支解决的,不要用3个
- 分支条件之间不要有重叠
- 每个分支的优先级要明确
举个例子,一个费用报销流程:
| 条件 | 分支去向 |
|---|---|
| 金额 <= 1000 且 费用类型为「办公用品」 | 直接主管审批 |
| 金额 > 1000 且 <= 5000 | 部门经理审批 |
| 金额 > 5000 | 总经理审批 |
| 费用类型为「差旅费」 | 财务部预审 |
你看,这里有个坑:如果一笔差旅费金额是6000,它会走哪个分支?嗯,这里要注意,条件分支的优先级决定了结果。我一般建议把「特殊类型」的条件放在前面,金额条件放在后面。或者干脆用「互斥条件」来避免歧义。
避坑指南: 我曾经遇到过一个客户,条件分支里用了「包含」和「等于」混用,结果同一个数据同时匹配了两个分支,流程直接报错。所以条件表达式一定要写严谨,能用「等于」就别用「包含」。
2.3 会签与或签配置:多人审批的正确姿势
会签和或签,是多人审批场景里的核心概念。很多初学者搞混,我简单说清楚。
- 会签(与签):所有人都同意,流程才能往下走。一人反对,流程退回。
- 或签:只要有一人同意,流程就往下走。一人同意,其他人自动跳过。
听起来简单吧?但实际配置时,有几个细节很容易踩坑。
第一个坑:投票比例。 有些场景不是「全票通过」,而是「超过半数通过」。比如5个评委,3个同意就算通过。这种叫「比例会签」。配置时要注意设置「通过比例」参数,比如60%、80%。
第二个坑:审批顺序。 会签是并行还是串行?并行就是所有人同时收到待办,谁先批都行。串行就是按顺序一个一个来。我建议:紧急事项用并行,重要事项用串行。并行快,但容易漏看细节;串行慢,但每个人都能认真看。
第三个坑:超时处理。 如果有人一直不批怎么办?我习惯配置一个「超时自动转交」或「超时默认通过」。但注意,超时默认通过要慎用,尤其是涉及财务、法务的审批。
配置示例(伪代码):
// 会签配置
{
"type": "countersign", // 会签类型
"mode": "parallel", // 并行模式
"passRatio": 1.0, // 100%通过
"timeout": 72, // 72小时超时
"timeoutAction": "transfer", // 超时转交上级
"voters": ["role:dept_manager", "role:finance"] // 审批人
}
我个人习惯在会签节点加一个「意见汇总」功能。就是所有审批人批完后,系统自动生成一个汇总意见,方便后续节点的人快速了解情况。这个功能虽然小,但用户体验提升很大。
2.4 子流程调用:别重复造轮子
子流程,说白了就是「流程里的流程」。为什么要用子流程?因为很多审批逻辑是通用的。比如「预算审批」「合同审批」「人事审批」,这些流程在很多大流程里都会出现。
我见过最夸张的一个客户,同一个「预算审批」逻辑,在采购流程、报销流程、项目立项流程里各写了一遍。每次预算规则变了,三个地方都要改,改完还容易漏。
子流程的好处就是:一次定义,多处复用。
配置子流程时,有几个关键点:
- 数据传递:主流程的数据怎么传给子流程?子流程的结果怎么返回给主流程?我建议用「全局变量」或「上下文对象」来传递。
- 同步 vs 异步:同步子流程会阻塞主流程,等子流程跑完才继续。异步子流程则不会阻塞,主流程继续往下走。大部分场景用同步,只有通知类、日志类的用异步。
- 子流程版本管理:子流程更新后,已经在运行的主流程怎么办?我建议「运行中的流程使用旧版本,新发起的流程使用新版本」。
经验之谈: 子流程的粒度要适中。太细了,配置起来麻烦;太粗了,复用性差。我一般把「需要3个以上节点、且跨流程复用」的逻辑抽成子流程。比如「预算审批」至少需要「部门审批→财务审批→总经理审批」三个节点,这种就适合抽成子流程。
嗯,这四个进阶能力,你如果都能熟练运用,基本上可以应对企业里90%的复杂审批场景了。下一章我们聊聊流程的监控与优化,那才是真正让流程「跑得快、跑得稳」的关键。