炎黄BPM:企业通用流程路由设计方案-BPM解决方案.doc
炎黄 BPM:企业通用流程路由设计方案 -BPM 解决方案 有没有一种方法能够快速方便的批量设置流程路由规则,使之适应变化迅速而复杂的企业组织架构造本企业从业务应用角度出发,为减轻实施和维护的工作量,而设计了一套企业通用路由方案。根据在本企业的实际运行结果,证明能够适应企业的组织架构变化,确实减轻维护工程师的工作量。特编写此文,以抛砖引玉。 前言 我公司采用炎黄盈动 BPM 平台以来,系统已成为公司的重要沟通和管理工具之一。但复杂的组织架构和快速变动的岗位和部门调整,给平台开发和实施人员带来了很大的困惑和工作量。同时,由于企业的管理已经进入精细化管理阶段,这就导致每个流程的系统规则更为复杂。 正是如下的三个问题,逼迫着我们去思考一种技术方案,能简单快速的实施和维护流程: 复杂的矩阵式组织架构,非树型的工作汇报路线 快速变化的部门和岗位、人员调整 难以简单实现的流程规则和审核路由 企业通用路由的设计思路 从易用性考虑 ,我们最终确定使用 EXCEL 作为维护工具,在其中按【 EXCEL模板】规定的业务习惯输入、修改路由规则,然后利用自己开发的工具【规则生成器】导入到数据库的相关表中。在系统运行流程寻找下一节点的人员时,通过平台 99 号路由嵌入系统的【路由解析器】就从这张表中读取规则,进行路由解析,最后得到对应的岗位和人员。 EXCEL 模板 Excel 模板主要分为 2 部分,分别是系统识别项说明和业务规则设置。 系统识别:用来帮助系统自动识别第 2 部分的业务规则。 主要内容:流程名称、流程 UUID、流程包含的业务条件(比如请假类型)、流程包含的流程节点,分别对应第 2 部分的第几列。而业务条件对应哪个数据表的哪个字段,则是其中的重点之一。 业务规则:用输入或修改的方式,直接按业务习惯输入业务规则。 如下图,第二行表示:总部的公司领导请事假 3 天以上,需要总裁、董事长审批。 正如上图,在审核人发生变动时,维护人员只需手工修改审核人,然后 运用工具再次倒入系统,系统就可以自动识别新的路由方案。 规则生成器 规则生成器的作用是: 把 EXCEL 上传到服务器,根据 EXCEL 中( 1)系统识别项的说明,自动读取EXCEL 中的( 2)业务规则数据,保存到数据库中的原业务规则表中备查。 按数据库中系统规则表的要求,将数据重新组织,然后保存到系统规则表中。 其中,系统规则表的设计如下: 具体数 据存储举例如下: 路由解析器 路由解析器的作用是: 根据流程和节点号,程序读取路由系统规则表,然后逐一判断系统路由规则是否符合当前环境条件,从而得到相匹配的系统规则后,得到一个或一批虚拟或者实际岗位。 得到岗位后,根据企业的实际组织架构进行人员定位,最终得到某一个或一批人员返回给平台。 同时也可以得到下一个跳转的节点号或者默认下一个节点。 主程序框架: public String routeUser( UserContext uc, HeadMessageModel instanceModel, DepartmentModel localDepartmentModel, int ownerDepartmentId, WorkFlowStepModel workFlowStepModel, int taskId) { Connection conn = null; try{ conn = DBSql.open(); HashMap arguments = getCommonArguments( conn, uc, workFlowStepModel, taskId); //得到环境变量 Regulation reg = getRegulation( arguments, conn); //得到匹配的规则 String users = getRouteUsers( reg, arguments); //得到实际的用户UserID String ret = Function.checkAddress( users); //检查 if( ret == null ret.equals(“”)) { MessageQueue.getInstance()。 putMessage( uc.getUID(),“数据库错误【 E01】:岗位解析发生错误!请与系统管理员联系!“); // 弹出提示信息 return “”; } if( ret.equals(“ ok”)) {return users;} else { return “”; } } catch( Exception ex) { ex.printStackTrace(); MessageQueue.getInstance()。 putMessage( uc.getUID(), “通用路由错误,请与管理员联系 [" + ex.getMessage() + "]“); } finally{ DBPoolsManager.getInstance()。 freeConnection( conn); } return “”; } 根据规则返回的岗位或工号,进行实际组织架构匹配,返回实际的人员工号: public static Interpreter getRoleInterpreter( String roleName, String auditLevel,HashMap argument) { int roleType = RoleUtil.getRoleTypeByRoleName( roleName); if ( roleType == HsRouteCommonParameters.ROLE_DIRECTUID) { //工号,直接返回 return new DirectUidInterpreter( roleName) ; } else if ( roleType == HsRouteCommonParameters.ROLE_DIRECTROLE) { //实际岗位,解析得到人员工号 return new DirectRoleInterpreter( roleName, auditLevel, argument); } else if ( roleType == HsRouteCommonParameters.ROLE_VIRTUALROLE){ //虚拟岗位,解析得到人员工号 return new VirtualRoleInterpreter( roleName, auditLevel, argument); } else if ( roleType == HsRouteCommonParameters.ROLE_IGNOREROLE) { return new IgnoreRoleInterpretor( roleName, auditLevel, argument); } else if ( roleType == HsRouteCommonParameters.ROLE_TABLE) { //数据表中的字段,读取出来后再解析 return new TableRoleInterpretor( roleName, auditLevel, argument); } return null; } 企业通用路由与炎黄平台的关系 本路由功能在炎黄 BPM 平台上开发,必须使用炎黄平台,具体技术接口为:99 号自定义路由(得到路由岗位人员)和 RoleJump 触发器(得到下一节点号,指定跳转)。 炎黄 BPM 平台目前已经提供了业务规则的设置界面。这个企业通用路由 功能,本质是完成了相同工作。 具体区别和功能拓展有: 可以批量设置流程规则和路由岗位。 增加对一个流程的一次性所有节点的流程规则设置。 增加对“门店 -分公司 -区域 -总部 -集团”的层级审批支持。 增加对特殊“虚拟岗位”的支持。这有利于减少规则的设置数量。 比如:分管副总裁这个虚拟岗位,其本质为某些岗位组合,只是需要在运行时根据某些条件再确定具体岗位。如:行政的人发起流程时,分管副总裁就是分管行政的副总裁。 增加对特殊人员或者特殊岗位的特殊处理。 比如:秘书岗位, 无论处于那个部门,都必须归属于当地行政部门管理。 当然,这些功能可以不断根据企业的实际情况不断调整,直至更为完善,更为符合企业的需要。 结束语 作为中国首家 BPM 软件和服务提供商,炎黄盈动一直专注于为合作伙伴和最终用户提供最优秀的商业流程应用快速开发平台和成熟的应用套件产品,并帮助用户完成从协同管理向流程管理的价值过渡。炎黄盈动的 BPM 整体解决方案构建在自主研发的 AWS BPM业务基础中间件平台上,提供了从业务规划、建模到运营、监控、优化的全周期管理。 企业通用路由方案就是完全基于 AWS BPM平台之上的快速搭建的一个应用功能,在企业实际运行中,不仅能提高维护人员的反应速度,减少工作量,而且能快速的接入企业管理思想,实现企业的敏捷管理,大幅提升企业办公效率。 最后,衷心的感谢炎黄盈动的各位工程师,是他们给予了我技术支持和无私的帮助。并将此文献给同样在 OA 流程开发和维护战线上奋斗中的其他企业开发工程师们。