2. 流程设计器进阶:动态表单设计、条件分支逻辑、会签与或签配置、子流程调用

好,咱们接着聊流程设计器。上一章我们把基础操作过了一遍,今天要聊的才是真正拉开差距的地方。说白了,很多OA系统用着用着就卡住了,问题往往就出在表单设计太死、分支逻辑太简单、多人审批搞不清楚、子流程不会复用。

我个人习惯把流程设计器分成四个进阶能力:动态表单、条件分支、会签或签、子流程。这四个点你吃透了,基本上企业里90%的复杂审批场景都能搞定。

2.1 动态表单设计:让表单跟着流程走

先说说动态表单。你想想看,一个采购审批单,普通员工填的和部门经理填的,字段能一样吗?当然不一样。普通员工只需要填申请金额、事由,经理可能还要填预算科目、成本中心。

什么是动态表单? 就是表单的字段、布局、校验规则,可以根据流程节点的不同而变化。不是一张表单打天下,而是「一流程多表单」。

核心思路: 每个流程节点绑定独立的表单视图。节点A显示字段1、2、3,节点B显示字段4、5、6,节点C显示全部字段但只读。

我在项目中遇到过最典型的场景:请假流程。员工提交时只需要填「请假类型」「开始时间」「结束时间」「事由」。但到了部门经理审批时,需要看到「当前团队人力情况」「工作交接人」。到了HR备案时,又需要看到「年假余额」「考勤周期」。你看,同一个流程,三个节点,三个不同的表单视图。

实现方式其实不复杂,我一般推荐两种做法:

  1. 字段权限控制:表单里所有字段都定义好,但每个节点可以设置「可见」「可编辑」「必填」「隐藏」。
  2. 独立表单绑定:每个节点绑定一个独立的表单模板,节点流转时自动切换表单。

我个人更倾向第二种,因为维护起来更清晰。第一种如果字段多了,权限矩阵会变得非常复杂,容易出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%的复杂审批场景了。下一章我们聊聊流程的监控与优化,那才是真正让流程「跑得快、跑得稳」的关键。