暂时能想到的一些思路如下,要是有高人路过,还望指点!!!
一、名词约定
* 发起人:流程的发起者。如请假流程中填写请假单并请假的人。
* 审批人:流程中需要完成审批任务的人。
* 节点:流程中任一由程序或人为控制的结构单元。
如“发起流程”节点、“部门经理审批”节点、“完成”节点、“打回调整”节点等
* 候选人: 节点中需要人为干预部分的负责人,候选人可能是发起人、审批人或其它相关人员。
* 权限组: 权限组包含一组候选人,组中的任一人、部分人或所有人都有可能成为负责人。
* 管理员: 可以控制工作流的人员(有可能是系统管理员、相关开发人员、相关业务负责人)
二、方案
1) 节点指定
定义流程时,直接在各个节点指定候选人。
如请假流程中,“部门经理审批”节点指定为“张三”,则此流程中所有部门审批均由张三完成。
--> 优点:开发快捷、结构清晰;可用于“总经理审批”等候选人单一且固定的情况。
--> 缺点:A. 缺乏灵活性。如候选人变动,需要改流程定义文件。
B. 如果系统中已有user表,仍需将候选人信息摘要copy到act_id_user表中
2) 发起人指定
流程发起人在将业务单提交审批前,手工指定此业务单需要由谁审批。
如请假流程中,发起人“张三”需要指定该申请由“李四”审批。
--> 优点:A. 后续节点的候选人直接人为指定,开发方便。
B. 存在多个部门经理时,不会存在程序难以区分深圳、济南两地各自审批的问题。
--> 缺点:A. 指定审批人时,难以控制指定的人员范围。
B. 如果误将申请提交给一个无审批权限的人,会造成申请单无法审批。
C. 操作繁杂。如果流程涉及较多审批人,需要一一指定。
D. 需要发起人熟悉整个审批流程,熟悉流程中涉及的节点与公司人员职能的关系。
3) 部门树控制
由部门树结构控制候选人。
如“张三”发起请假流程,程序可通过部门结构,查找到“张三”的部门经理,指定其为“部门经理审批”的候选人。
--> 优点:不会存在程序难以区分深圳、济南两地各自审批的问题。
--> 缺点:A. 要求部门结构清晰且相对固定
B. 流程与业务结合过于紧密,灵活性差。
C. 可能存在跨部门审批,跨层级审批的情况,程序需要逐一控制。
4) 权限组控制
为每个节点分配一个权限组,权限组中的候选人由管理员预先设定。
--> 优点:A. 灵活。部门结构变动,人员变动时不会影响。
B. 可由候选人认领任务,相对方式2),更高权利的人拥有更多决定权。
C. 可由业务人员统一指定节点候选人,比发起人指定、程序控制更具针对性。
--> 缺点:A. 每个流程部署后均需管理员预先设置权限组中的候选人流程才能正常运行。
B. 组内候选人权限等同,很难再做更细致的区分。
C. 需要启用Activiti整个权限模块,结合OA时要编写一定量的辅助性代码。