笔者有OA系统的设计经验,本系列将分篇章总结OA中最核心的功能,希望能尽可能全面地记录笔者的经验,和感兴趣的读者交流分享。 OA系统对于提升企业和政府单位的办公效率有非常重要的意义,其应用之广泛无需多言。由于机构内部业务的复杂性、多种人员身份,以及不同组织间办事流程的差异性,同时兼顾严谨和灵活导致OA的功能逻辑极其复杂。体现其复杂性的一个代表功能就是流程,这是本篇文章探讨的对象。 一、关于流程的重要认知 1. 流程让OA区别于其他系统 机构内各部门和人员间有严格的管辖关系,因此诸多业务都有严格的办事流程。 最容易想到的例子就是行政事务的审批流程,比如员工提交请假申请,需经直接领导、部门领导、分管副总审批,最终汇总到人事部门。其他例子还包括部门申请某会议室的使用权限,或者内部公告在发布前经相关人员审查内容等等。 由于OA的主要目的是把线下业务移至线上,因而OA的业务模块往往要遵循特定的事务流程,深深打上了"流程"这个让OA区别于其他系统的印记。 2. 流程模块要独立于业务模块 诸多业务模块都可能涉及流程,从程序设计的角度来看流程的代码实现应当被作为公用的独立的函数被其他代码模块调用,对于产品设计而言同样要把流程配置作为单独可访问的功能模块,避免流程和业务的耦合。 业务模块通过特定的接口查询流程节点的信息,或者向流程模块传递更新的流程信息。如此一来,产品经理需要思考如何让某个流程和具体的业务绑定。 解决思路无非两种,在流程配置模块里设计好流程,然后选择关联的业务模块;或者在各业务模块里分别嵌入可以配置流程的子功能。第二种方式更灵活,可以根据业务模块的特别需求定制改造流程配置的功能细节。 二、流程模块的构成 1. 流程绘制 流程绘制过程中的可视化方式因系统而异,我们不讨论这个方面的问题,值得探讨的是流程节点的类型。业务场景决定了系统应该提供哪些流程节点,下面列举几个常见的节点类型。 1)审批节点 审批节点指定了在该流程环节由谁完成审批动作,应当提供丰富的选择以满足不同的业务场景。下面列出几种指定审批人的方式: 指定用户:用于特别要求交给某个人处理时。不具有通用性,不常用,但不排除用于应对特殊情况。 直接上级领导:比如请假单这类行政审批单,交给直接领导审批。 指定职务的用户:比如办公设备的申请会提交到设备管理员,只需要指定"设备管理员"职务。 指定接口人:比如提前创建好一个"公文接口人"的接口人类型,包含所有部门的助理。下发全公司公告时选择发给"公文接口人"即可。 指定角色的用户:比如所有的高管都有"高管"角色(角色赋予了用户特定的权限,接口人是不定义权限的,只是圈定某一些用户而已)。比如公司财务报表最终发给所有高管查看,在流程节点里指定"高管"角色即可。 指定部门+以上条件:组合条件提供更严格的限制。比如请假单提交给"人事部门"的"HR"。 2)会签节点 会签指的是多人共同签批,该节点要指定多个审批人,并且设置会签规则,包括一人同意或者全部同意即可进入流程下个环节。 3)分支节点 流程不一定沿着一条路径从一而终,就像分岔路口一样,多个分支通往不同的方向和目的地。分支节点之后定义多个流程分支,流程发起人或审批人在业务模块里填写的信息决定了流程向哪个分支发展。 比如请假天数少于3天时只需要部门负责人同意,请假天数超过3天需要分管副总同意。 2. 按钮配置 这里的按钮指的是"提交"、"同意"、"退回"等显示在业务模块给用户使用的按钮,用户点击按钮后触发不同的后续流程。 虽然按钮显示在业务页面,但是按钮应该在流程模块里定义。在流程节点上可以自定义按钮的名称,并且定义每个按钮关联的后续流程。 3. 字段校验 在流程发起人或审批人点击上文提到的按钮后,需要校验业务页面的信息是否填写完整、正确,才能进入到下个流程环节。不同按钮要求校验的字段可能不同,比如有的按钮要求页面所有信息都填写,有的按钮要求部分信息填写就足够了,一般校验字段是否必填即可。 有的校验规则比如要求填写纯数字、纯字母、或者邮箱地址,在业务模块的控件上而不是这里提到的按钮上施加这样的校验规则比较合适,比如填写请假天数的控件只能填写数字,这一类校验规则应当在业务模块定义而不是流程模块。 4. 字段权限 处于流程某个环节的用户看到业务页面的内容应当被限制使用权限,比如请假单填写人可以填写请假时段、请假理由等,审批人只能查看这些字段而不能编辑。字段权限包括只读、编辑、隐藏。在流程节点上设置字段权限。 三、流程绘制界面 流程绘制界面常见的有两种: 1. 全局型 这种类型的展现方式可以直观地看到整个流程的全貌,特别适合于流程分支很多的情况,只是绘制操作复杂一点,需要考虑节点和连线的摆放位置避免混乱。 比如下图展示的是公文发布流程: 2. 局部型 在这种流程表现形式下,同个页面只能展示部分节点,绘制时不用考虑节点和连线的摆放,流程复杂时可以只聚焦部分流程,减少干扰。 下图截自阿里的宜搭,流程节点排列在一条直线上,"环节1"节点是另一部分流程的入口,点击后查看该部分流程的细节,如图"宜搭-流程界面2"所示。 宜搭-流程界面1 宜搭-流程界面2 下图是"请假理由"字段取值不同时的流程分支,查看方式不如全局流程图直观,特别当流程分支多层嵌套的时候非常不方便。所以这种展现形式适用于流程简单的场景。 宜搭-流程分支