写OA系统,流程永远是绕不开的核心话题。
我刚接触这类系统时,最先感受到的倒不是功能有多复杂,而是一种完全不同的“秩序感”。普通的业务软件,很多时候你想怎么存就怎么存,想怎么查就怎么查,自由度很高。但OA不一样,几乎所有动作都得按规矩来:请假、申领设备、发一篇内部公告,这些看似简单的操作,背后都牵着一串看不见的审批和处理链条。这些链条,就是流程。可以说,正是流程,让OA跟其他管理系统真正区别开来。
流程为什么这么重要?因为无论是企业还是政府单位,人与人的权限边界都很清晰。什么事该谁办,谁先看谁后看,谁最终拍板,早就有既定的规则。把这些规则从线下搬到线上,自然而然就变成了流程。所以你会发现,OA里的业务模块,几乎都是长在流程上的,而不是反过来。这也意味着,如果流程设计得不好,整个系统用起来就会磕磕绊绊,甚至让人想退回到纸质办公时代。
从设计角度,有一个认知非常关键:流程模块必须独立于业务模块。业务模块五花八门,有管考勤的,有管公文的,有管资产的,但它们都需要调用流程的能力。如果流程代码跟业务代码混在一起,将来任何一个业务调整,都可能牵动流程跟着改,改一处动全身,维护成本极高。因此,在代码层面,流程应该作为公共能力被调用;在产品层面,流程配置也应该是一个单独的功能入口,让管理员可以集中管理,而不是分散在各个业务角落里。
那么,流程和业务怎么“绑定”到一起呢?常见思路有两种。一种是在流程配置中心里设计好流程,再选择适用于哪个业务;另一种是在每个业务模块内部,嵌入一个轻量级的流程配置子功能。后一种更灵活,因为可以根据业务特点定制细节。比如人事请假和公文发布,对流程节点的要求多少有些差异,放在业务模块里配置反而更顺手。

说到流程配置,真正拉开系统差距的,是流程节点类型的丰富程度。一个成熟的OA流程引擎,至少要能支撑几种典型的节点。
最常见的是审批节点。审批就是要找对人,所以“指定审批人”的方式必须足够灵活。最简单的,直接指定某个具体人员,比如总经理特批某种申请时,就把节点落到那个人头上。但大多数情况没法这么死板,更常用的方式是按组织关系来:提交给直接上级、提交给部门负责人,或者提交给某个特定职位上的人,比如“设备管理员”。还有一种很实用的方式是指定接口人,比如每个部门都设一个文件接口人,发布全公司通知时可以统一发给这批人,既不用挨个选人,也不会漏掉。如果再叠加上一层组合条件,比如“人事部门的HR角色”,就能把审批人圈得更精准,防止误送。
会签节点也是高频需求。一件事需要多人共同确认,可以设置成一人同意即通过,还是全部同意才继续。比如跨部门协作的立项,常常需要几个部门负责人同时同意,任何一个不同意都会卡住。

分支节点,是让流程变得智能的关键。现实中的处理路径往往不是一条直线,而是像岔路口一样,根据条件分流。比如请假天数少于3天,部门经理直接批了就行;超过3天,要自动转给分管副总。这个“条件”一般来自表单里填的数据,流程引擎读到这些数据后,自动判断该走哪条路。

按钮配置和字段权限,是两个容易被忽略但很影响体验的地方。按钮虽然在业务页面上显示,但它背后的动作——提交、同意、退回、转交——应该由流程模块来定义。每个按钮可以关联不同的后续步骤,甚至按钮名字也可以自定义,比如“提交部门经理审批”就比一个干巴巴的“提交”更清晰。
字段权限则决定了在不同节点上,用户能看到什么、能改什么。申请人在填单时,请假类型、天数、理由都可以编辑;到了审批人那里,这些字段可能就变成只读,而审批意见字段变成可编辑。如果某个环节不需要看到某些敏感信息,还可以直接隐藏。这些权限最好在流程节点上直接配置,而不是靠业务代码硬编码,因为同一个业务模块可能套用多个流程,权限需求会变。
按钮点击之后,还需要做字段校验。比如“提交”时要求必填项都填完,“退回”时要求必须填写退回原因。常规的校验规则,比如这个字段是不是必填,放在流程节点上配置就够了。但更复杂的校验,比如“天数必须为正整数”“邮箱格式正确”,更适合放在业务模块的控件层面,因为那属于业务数据本身的约束,而不是流程逻辑。

流程配置完了,怎么把它画出来给人看,也是个有意思的话题。常见的绘制界面有两种风格。
一种是全局型,把所有节点和连线平铺在一张画布上,一眼就能看到整个流程的全貌。这种形式特别适合分支多、路径复杂的流程,比如公文发布,从拟稿到核稿到签发到分发,每个环节都清晰可见。但缺点也很明显:节点一多,画布就乱,排布位置很费心思,不然线会交叉得像团乱麻。
另一种是局部型,每次只看一小段流程,节点按线性排列,点击某个节点才能展开下一段。这种形式在简单流程里很清爽,像阿里巴巴的宜搭那样,节点串成一条线,不给人压力。但当流程分支嵌套好几层时,就很容易迷失方向,不知道自己在整体流程的哪个位置。所以它更适合流程相对简单的场景,复杂流程还是得靠全局视图来把控。
说到底,流程模块的设计,就是在严谨和灵活之间找平衡。太严谨,流程僵化,遇到特殊情况走不通;太灵活,又容易失去管控,变成毫无约束的样子。好的OA流程引擎,应该让管理员能像搭积木一样,把审批、会签、分支、条件判断这些基本元件组合起来,适配各种业务场景,而不是让业务去迁就系统。
本系列文章旨在记录和分享我在OA系统设计中的一些实战经验,希望能给同样在摸索这类系统的朋友一点参考。内容部分来源于公开资料与个人实践,若涉及侵权,请联系删除。
Entrar Agora