
有沒有一種方法能夠快速方便的批量設置流程路由規則,使之適應變化迅速而復雜的企業組織架構?本企業從業務應用角度出發,為減輕實施和維護的工作量,而設計了一套企業通用路由方案。根據在本企業的實際運行結果,證明能夠適應企業的組織架構變化,確實減輕維護工程師的工作量。特編寫此文,以拋磚引玉。
前 言
我公司采用炎黃盈動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流程開發和維護戰線上奮斗中的其他企業開發工程師們。
CIO頻道人物視窗
CIO頻道方案案例庫
大數據建設方案案例庫
電子政務建設方案案例庫
互聯集成系統構建方案案例庫
商務智能建設方案案例庫
系統集成類軟件信息研發企業名錄