蔡麗霞,任曉娜
?
一種中型企業(yè)辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
蔡麗霞,任曉娜
摘 要:以SSH為代表的多層架構(gòu)的辦公自動(dòng)化系統(tǒng)能很好地滿足中型企業(yè)的需求。深入研究了Struts、Spring、Hibernate的開源框架,在此基礎(chǔ)上整合基于AJAX技術(shù)的DWR框架,并完成對(duì)RBAC權(quán)限模型的改進(jìn),以JBPM開源工作流為基礎(chǔ)實(shí)現(xiàn)了公文流轉(zhuǎn)模塊的開發(fā),最后進(jìn)行了系統(tǒng)測(cè)試。結(jié)果表明,該系統(tǒng)方便實(shí)用,安全可靠。
關(guān)鍵詞:SSH框架;RBAC權(quán)限模型;JBPM工作流;公文流轉(zhuǎn);
為企業(yè)定制一套自動(dòng)化程度較高的辦公自動(dòng)化系統(tǒng),不僅可以依據(jù)企業(yè)自身需求,改進(jìn)企業(yè)業(yè)務(wù)流程和管理模式,更好適應(yīng)信息化發(fā)展的趨勢(shì);還可以加快企業(yè)內(nèi)部的信息交流,提高運(yùn)行效率,降低成本,提高競(jìng)爭(zhēng)力[1][2]。
本文以筆者所在的某市某中型集團(tuán)企業(yè)為例,闡述基于B/S架構(gòu),采用SSH[3][4]框架、JBPM[5][6]工作流引擎及RBA C[7][8]模型,如何設(shè)計(jì)與實(shí)現(xiàn)開源架構(gòu)的辦公自動(dòng)化系統(tǒng),并對(duì)其中采用的關(guān)鍵技術(shù)進(jìn)行了較為深入的探討,最后,通過測(cè)試運(yùn)行表明該系統(tǒng)控制比較靈活,訪問安全,實(shí)用性好。
1.1 系統(tǒng)功能模塊的設(shè)計(jì)
系統(tǒng)的開發(fā)目標(biāo)是按需為企業(yè)量身打造,以“用”為本,設(shè)計(jì)了系統(tǒng)架構(gòu),如圖1所示:
圖1 系統(tǒng)架構(gòu)圖
由門戶平臺(tái)、系統(tǒng)設(shè)置平臺(tái)和流程引擎平臺(tái),實(shí)現(xiàn)核心功能的流程模塊和提供便捷服務(wù)的非流程模塊構(gòu)成。
其中公文管理模塊和工作流程模塊是系統(tǒng)的核心功能,主要來定義企業(yè)的各種流程,并針對(duì)不同的流程定義表單。
系統(tǒng)管理模塊包含權(quán)限管理、系統(tǒng)初始化等。采用基于角色的權(quán)限控制策略,可以靈活去定義角色,對(duì)角色分配權(quán)限,為用戶分配角色,為用戶分配權(quán)限等操作。
個(gè)人事務(wù)模塊共6個(gè)子模塊,主要實(shí)現(xiàn)個(gè)人日常工作的功能。
行政辦公模塊分為六個(gè)子模塊,分別為會(huì)議管理、車輛管理、用品管理、圖書管理、印章管理和資產(chǎn)管理子模塊。
人事管理模塊主要包含人事檔案管理、考勤管理、合同管理、工資管理、招聘管理和績(jī)效考核等內(nèi)容。
消息管理模塊可以發(fā)送各種通知、公告、會(huì)議等消息,并能隨時(shí)查看本用戶已發(fā)送和接收的各類通知。
信息交流模塊主要為實(shí)現(xiàn)企業(yè)內(nèi)部的信息共享和互動(dòng),可以發(fā)送和回收調(diào)查問卷、使用內(nèi)部博客、論壇和電子郵件等。
1.2 系統(tǒng)開發(fā)技術(shù)、工具與環(huán)境
為降低系統(tǒng)的開發(fā)成本,減輕企業(yè)負(fù)擔(dān),可選擇一些成熟的開源軟件,解決高成本的問題。為滿足該企業(yè)集團(tuán)用戶的大數(shù)據(jù)量、高可用性的要求,則采用目前比較成熟流行的基于SSH框架J2EE的B/S的解決方案。
在目前的JAVA EE開發(fā)中,存在著多種開發(fā)工具,其中Eclipse的使用最為廣泛,已成為通用的語言開發(fā)工具平臺(tái);考慮到系統(tǒng)的跨平臺(tái)和低成本要求,則優(yōu)先選擇開源免費(fèi)的MySql;應(yīng)用服務(wù)器同樣也選擇了開源的Tomcat[9]。
對(duì)于一個(gè)中型企業(yè)集團(tuán)用戶來說,所選擇的上述運(yùn)行環(huán)境可以完全滿足應(yīng)用的需要。
2.1 SSH框架整合的具體實(shí)現(xiàn)
在該系統(tǒng)中,SSH框架采用逐步整合的方式,首先整合中間層的Spring和Hibernate,然后整合Struts[10-12]。
(1)添加SSH框架所必須的jar包
使用MyEclipse創(chuàng)建工程,分別拷貝Struts、Spring和Hibernate的jar包到工程的lib目錄下。
(2)修改web.xm l文件。在文件中增加如下內(nèi)容:
Spring的配置內(nèi)容:指定Spring的配置文件。
Struts的配置內(nèi)容:主要是增加Struts的ActionServlet,使Tomcat容器在啟動(dòng)的時(shí)候自動(dòng)讀取初始參數(shù)struts-config. xm l加載并啟動(dòng),這樣就能響應(yīng)用戶的請(qǐng)求。
在類路徑下創(chuàng)建Spring的配置文件:application-con text.xm l,并在其中配置數(shù)據(jù)源,將Hibernate交給Spring管理。
整合Struts:在WEB-INF目錄下加入struts-config.xm l,另外在web.xm l文件中加入對(duì)Action的配置,這樣把Struts納入Spring的管理后,就完成了SSH框架的整合。
(3)添加DWR[13]的支持
DWR是一種廣泛使用并且易用的Ajax開源框架,可以快捷地創(chuàng)建到服務(wù)器端Java對(duì)象的Ajax接口,對(duì)各功能模塊的開發(fā)都有較大的幫助。
2.2 權(quán)限管理模塊的實(shí)現(xiàn)
RBAC權(quán)限模型是基于角色進(jìn)行授權(quán)的。這種授權(quán)大大的減少了系統(tǒng)中權(quán)限管理的負(fù)擔(dān),但在一些信息管理不太規(guī)范的企業(yè)中,往往需要超級(jí)管理員既可以針對(duì)角色授權(quán),也可以單獨(dú)針對(duì)用戶授權(quán)。該系統(tǒng)的權(quán)限管理以RBAC權(quán)限模型為基礎(chǔ),并對(duì)RBAC3模型進(jìn)行了改進(jìn),采用針對(duì)角色授權(quán)和針對(duì)用戶授權(quán)相結(jié)合的方式[14-15],來滿足企業(yè)的實(shí)際需求,授權(quán)模型如圖2所示:
圖2 系統(tǒng)權(quán)限管理模型
由于該系統(tǒng)擴(kuò)充了典型的RBAC權(quán)限模型,不同角色的權(quán)限有可能產(chǎn)生沖突,因此要設(shè)置角色的優(yōu)先級(jí),以確保權(quán)限沖突時(shí)不至于產(chǎn)生二義性。角色的優(yōu)先級(jí)約定原則為:若用戶屬于多個(gè)角色,當(dāng)不同角色所擁有的權(quán)限發(fā)生沖突時(shí),發(fā)生沖突的權(quán)限以優(yōu)先級(jí)高的角色所擁有的權(quán)限為準(zhǔn),與之沖突的低優(yōu)先級(jí)的角色權(quán)限作廢;不沖突時(shí)權(quán)限則為這些角色權(quán)限的并集。
在本系統(tǒng)對(duì)權(quán)限管理的實(shí)現(xiàn)中,可以根據(jù)企業(yè)信息管理的需求給每一個(gè)角色分配不同的權(quán)限,角色添加之后就可以對(duì)角色進(jìn)行授權(quán),相應(yīng)的權(quán)限只需要選中或取消復(fù)選框,就可以直接完成對(duì)角色的授權(quán)或取消授權(quán);對(duì)用戶授權(quán)時(shí),設(shè)置“不繼承”復(fù)選框,只有勾選這個(gè)復(fù)選框時(shí),用戶的單獨(dú)授權(quán)設(shè)置才有效,否則將使用其擁有的角色權(quán)限,對(duì)用戶的授權(quán)如圖3所示:
圖3 對(duì)用戶的授權(quán)
2.3 JBPM實(shí)現(xiàn)工作流的管理
該系統(tǒng)的核心功能是企業(yè)流程的管理和自動(dòng)化,實(shí)際就是工作流的管理。JBPM就是一個(gè)靈活可擴(kuò)展的工作流管理系統(tǒng)。
JBPM的流程操作:
(1)創(chuàng)建數(shù)據(jù)庫表
Jbpm會(huì)把流程定義和流程執(zhí)行持久化到數(shù)據(jù)庫中,需要在數(shù)據(jù)庫中創(chuàng)建所需的數(shù)據(jù)庫表.
JbpmConfiguration.getInstance().createSchema()
(2)部署流程
創(chuàng)建jbpmConfiguration對(duì)象:
JbpmConfiguration.getInstance();
接著讀取流程定義文件,創(chuàng)建processdefinition對(duì)象:
ProcessDefinition.parseXm lResource(String);
中國(guó)國(guó)際商會(huì)副秘書長(zhǎng)張屹在致辭中表示,中國(guó)國(guó)際商會(huì)負(fù)責(zé)與瀾湄對(duì)口機(jī)構(gòu)開展機(jī)制性的務(wù)實(shí)合作。作為2018瀾湄合作博覽會(huì)的主辦單位,中國(guó)國(guó)際商會(huì)積極發(fā)揮對(duì)外交流的渠道和專業(yè)服務(wù)的優(yōu)勢(shì),為云南的對(duì)外開放和經(jīng)濟(jì)社會(huì)發(fā)展作出一份貢獻(xiàn)。他強(qiáng)調(diào),中國(guó)國(guó)際商會(huì)愿與瀾湄國(guó)家貿(mào)易投資促進(jìn)機(jī)構(gòu)和商協(xié)會(huì)組織共同努力,為瀾湄國(guó)家企業(yè)提供更好的專業(yè)化貿(mào)易信息以及投資、促進(jìn)、綜合一體化服務(wù),為瀾湄國(guó)家綜合服務(wù)作出努力。
創(chuàng)建jbpmContext對(duì)象:
jbpmConfiguration.createJbpmContext();
部署流程到數(shù)據(jù)庫:
context.deployProcessDefinition(definition);
(3)創(chuàng)建公文,并與流程實(shí)例綁定
從數(shù)據(jù)庫中加載processDefinition對(duì)象,根據(jù)加載讀取的流程文件創(chuàng)建流程實(shí)例并存儲(chǔ),加載公文,綁定公文到創(chuàng)建的流程實(shí)例:
processIn
sIn
stance.getContextInstance.createVariable("document",documen t.getId())
(4)公文創(chuàng)建者提交公文
根據(jù)各個(gè)節(jié)點(diǎn)的審批情況進(jìn)行下一個(gè)流程節(jié)點(diǎn)的觸發(fā),直至流程結(jié)束。
2.4 公文流轉(zhuǎn)模塊的設(shè)計(jì)與實(shí)現(xiàn)
公文流轉(zhuǎn)模塊是系統(tǒng)的核心功能模塊,是辦公自動(dòng)化系統(tǒng)最重要的功能之一。它分為兩部分:公文管理和流程管理。
2.4.1 公文流轉(zhuǎn)模塊的領(lǐng)域模型
通過對(duì)用戶用例的分析,抽象出公文流轉(zhuǎn)的領(lǐng)域模型,在公文流轉(zhuǎn)中涉及到了公文、流程、審批歷史、參與者、流程實(shí)例、表單、表單域等對(duì)象,采用UML[16]圖表示如圖4所示:
圖4 公文流轉(zhuǎn)的領(lǐng)域模型
2.4.2 公文流轉(zhuǎn)模塊的動(dòng)態(tài)建模
公文管理模塊實(shí)現(xiàn)了對(duì)公文的管理,包括添加公文、刪除公文、提交公文、待審公文以及已審公文管理等操作。下面對(duì)公文流轉(zhuǎn)模塊中的核心功能進(jìn)行動(dòng)態(tài)建模來闡述其實(shí)現(xiàn)思路。
(1)部署流程
當(dāng)完成流程定義后,需將流程持久化到數(shù)據(jù)庫,再進(jìn)行后續(xù)的操作。
(2)創(chuàng)建公文
完成了流程定義的部署后,選擇流程,創(chuàng)建公文,并根據(jù)流程對(duì)應(yīng)的動(dòng)態(tài)表單,顯示不同的公文錄入界面。錄入后,公文將在工作流引擎的支持下,根據(jù)流程的定義向下流轉(zhuǎn),其動(dòng)態(tài)順序圖如圖5所示:
圖5 創(chuàng)建公文順序圖
公文的創(chuàng)建中,因?yàn)楣膶儆谝粋€(gè)具體的流程,在創(chuàng)建時(shí)需在流程列表中查詢選擇某個(gè)具體的流程,若沒有流程則無法創(chuàng)建公文。
在創(chuàng)建流程實(shí)例對(duì)象的時(shí)候,需從數(shù)據(jù)庫中加載流程定義對(duì)象,并根據(jù)流程定義對(duì)象來創(chuàng)建流程實(shí)例對(duì)象??稍诠闹性O(shè)置一個(gè)processInstanceId屬性,以記錄其對(duì)應(yīng)的流程實(shí)例對(duì)象,可將公文的ID作為一個(gè)流程實(shí)例變量存儲(chǔ)起來,這樣可以通過流程實(shí)例對(duì)象確定所攜帶的信息屬于某個(gè)公文對(duì)象。
(3)提交到流程
提交到流程的參與者可能是審批者,也可能是創(chuàng)建者。對(duì)于不同的參與者含義不同,但都需提交到流程,公文才能按流程定義流轉(zhuǎn)到下一節(jié)點(diǎn)。
(4)審批公文
人員登錄之后,可對(duì)此公文進(jìn)行審批,可以查看流轉(zhuǎn)到當(dāng)前登錄人的所有公文。
2.4.3公文流轉(zhuǎn)模塊的實(shí)現(xiàn)
(1)實(shí)體類和相應(yīng)的數(shù)據(jù)庫表
根據(jù)領(lǐng)域模型,首先設(shè)計(jì)本模塊中的實(shí)體類,并導(dǎo)出數(shù)據(jù)庫表,實(shí)體類及其屬性設(shè)計(jì)如下:公文類Document、流程類Workflow、審批歷史信息ApproveInfo、流程表單Flow Form、表單類型FieldType、表單輸入形式Field Input。
(2)業(yè)務(wù)邏輯類Manager的創(chuàng)建
①公文管理類DocumentManager,主要包括如下方法:addDocument(Document document,int workflow Id,int userId):根據(jù)工作流id和用戶id添加一個(gè)新的公文信息。
searchApproveInfos(int documentId):查詢公文的審批信息。
addApproveInfo(ApproveInfo approveInfo,int documentId,int approverId):存儲(chǔ)審批者對(duì)公文的審批信息。
submitToWorkflow(int userId,int documentId,String transistionName):當(dāng)用戶審批完畢,提交到流程,使公文流轉(zhuǎn)到下一個(gè)節(jié)點(diǎn)。
②工作流管理類WorkflowManager,主要包括如下方法:
deployProcessDefinition(byte[] processDefinition,byte[]processImage):根據(jù)流程定義文件和流程定義圖片將流程部署到數(shù)據(jù)庫。
findWorkflow(int workflow Id):根據(jù)流程標(biāo)識(shí)符查找流程。
addProcessInstance(String workflowName,int documentId):根據(jù)流程名稱和公文標(biāo)識(shí)添加流程實(shí)例。
當(dāng)定義了工作流管理類后,可以對(duì)工作流進(jìn)行部署和管理,流程管理的實(shí)現(xiàn)如圖6所示:
圖6 流程管理界面
③表單管理器FormManager,主要完成對(duì)表單、表單域、表單域類型的管理,包含的主要方法如下:
addForm(FlowForm form,int workflow Id):添加表單。
delForm(int form Id):刪除表單。
addField(Form Field field,int form Id,int fieldTypeId,int field InputId):添加表單域。
delField(int field Id):刪除表單域。
(3)創(chuàng)建相Action和ActionForm
創(chuàng)建DocumentAction、Workflow Action、Flow FormA -ction和相應(yīng)的Form,實(shí)現(xiàn)控制層和顯示層。
在該系統(tǒng)的開發(fā)過程和系統(tǒng)正式部署前,進(jìn)行了嚴(yán)格的測(cè)試,包括客戶端瀏覽器的兼容性測(cè)試、系統(tǒng)功能性測(cè)試和安全性相關(guān)測(cè)試。
3.1 瀏覽器兼容性測(cè)試
在進(jìn)行瀏覽器兼容測(cè)試時(shí),主要做了兩方面的測(cè)試:一是不同平臺(tái)下的測(cè)試,在目前主流的一些操作系統(tǒng)平臺(tái)下進(jìn)行了Web兼容性測(cè)試;二是對(duì)不同的瀏覽器的測(cè)試工作及不同廠商不同版本瀏覽器的兼容性測(cè)試。結(jié)果表明:由于在前臺(tái)頁面開發(fā)中使用JQuery框架,所以對(duì)不同平臺(tái)和不同廠商的瀏覽器都有完美支持。
3.2 Junit[17]白盒測(cè)試
該系統(tǒng)開發(fā)過程中的單元測(cè)試,主要使用Junit測(cè)試框架進(jìn)行。在開發(fā)過程中建立了test文件夾,專門進(jìn)行系統(tǒng)測(cè)試,每一個(gè)模塊在提交之前必須寫成測(cè)試單元,大大提高系統(tǒng)性的健壯性,降低了出錯(cuò)幾率。測(cè)試結(jié)構(gòu)如圖7所示:
圖7 JUnit單元測(cè)試結(jié)構(gòu)圖
本文對(duì)適合中型企業(yè)的辦公自動(dòng)化系統(tǒng)進(jìn)行總體設(shè)計(jì),明確該系統(tǒng)的基本功能和基本架構(gòu),采用SSH的開源架構(gòu),利用開源代碼軟件平臺(tái),最終實(shí)現(xiàn)一個(gè)管理性、可維護(hù)性和可擴(kuò)展性良好的系統(tǒng),并在實(shí)際應(yīng)用中取得了較好的效果,達(dá)到了設(shè)計(jì)的預(yù)期目標(biāo)。
參考文獻(xiàn)
[1] 杜雯翠,高明華.信息化提升對(duì)中小企業(yè)成長(zhǎng)空間研究—來自中小企業(yè)的調(diào)查分析[J].現(xiàn)代財(cái)經(jīng),2013,(03): 86-96+118
[2] 羅正軍,沈洋,邱廣華.協(xié)同辦公環(huán)境下企業(yè)信息化集成研究[J].信息技術(shù),2011,(07):8-11
[3] 劉斌.精通Java Web整合開發(fā):JSP+AJAX+Struts+Hiber -nate[M].北京:電子工業(yè)出版社,2007:51-57.
[4] 4.G. Berry, J. Carnell, M. Juric. J2EE Design Patterns Applied[M]. W rox, 2003:78-117.
[5] 陳廣智,潘嶸,李磊. 工作流建模技術(shù)綜述及其研究趨勢(shì)[J].計(jì)算機(jī)科學(xué),.2014.41(6A): 11-17+23.
[6] 董崇杰.基于JBPM流程設(shè)計(jì)器[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(10):55-59.
[7] 邵奇峰,韓玉民,鄭秋生.一種混合授權(quán)的RBAC模型及其UML建模[J].武漢大學(xué)學(xué)報(bào)(理學(xué)版),2014(05):419-423.
[8] 劉強(qiáng),王磊,何琳.RBAC模型研究歷程中的系列問題分析[J].計(jì)算機(jī)科學(xué),.2012,39(11):13-18
[9] 吳小青.JSP+TOMCAT+MYSQL開源軟件整合配臵初探——以揭陽職業(yè)技術(shù)學(xué)院圖書館網(wǎng)站服務(wù)器配臵為例[J]. 齊齊哈爾大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,28(4):66-69.
[10] 李剛.輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)-Struts+Spring+Hibe rnate整合開發(fā)[M].北京:電子工業(yè)出版社,2007:124-128.
[11] Shenoy S., Mallya N.. Struts Survival Guide. [M] ObjectSource LLC, 2004:177-180.
[12] James Elliott.Hibernate:A Developer's NoteBook[M]. [S.l.]:O'Reilly,2004:128.
[13] 林萍.基于SSH+DWR的高??蒲泄芾硐到y(tǒng)研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(07):66-68.
[14] Sandhu RS,Coyne EJ, Feinsten HI. Role-based access control models[J].IEEE Computer,1996,29(2):38-47.
[15] 黎川,周定康,熊娟.數(shù)字校園中基于角色的訪問控制[J].計(jì)算機(jī)與現(xiàn)代化, 2009,(4):20-21+26.
[16] 普里斯特.面向?qū)ο笤O(shè)計(jì)UML實(shí)踐(第2版)[M].龔曉慶,卞雷,譯.北京:清華大學(xué)出版社,2005:112.
[17] 高遠(yuǎn),夏敏,呂林峰.基于Myeclipse集成環(huán)境下的JUnit單元測(cè)試[J]. 指揮信息系統(tǒng)與技術(shù),2010,1(06):20-23.
Design and Imp lementation of OA System for M edium-sized Enterprise
Cai Lixia, Ren Xiaona
(Network Management Center, Henan Polytechnic Institute, Nayang 473000, China)
Abstract:Multi-tier architecture office automation system like Struts, Spring and Hibemate (SSH) can well satisfy the needs of medium-sized enterprises. The open source framework of SHH is further studied, and by this basis it integrates DWR framework based on AJAX technology, then improves RBAC permissions model, and develops document flow module based on JBPM open source workflow. The test results show that this system is convenient, practical and reliable.
Key words:SSH Framework; RBAC Perm issions Model; JBPM Workflow; Document Flow
中圖分類號(hào):TP391.4
文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1007-757X(2016)05-0046-04
作者簡(jiǎn)介:蔡麗霞(1979-),女(漢)河南南陽人,河南工業(yè)職業(yè)技術(shù)學(xué)院,網(wǎng)絡(luò)管理中心,講師,碩士,研究方向:計(jì)算機(jī)應(yīng)用,南陽,473000任曉娜(1981-),女,河南工業(yè)職業(yè)技術(shù)學(xué)院,網(wǎng)絡(luò)管理中心,碩士,講師,研究方向:計(jì)算機(jī)應(yīng)用,南陽,473000
收稿日期:(2015.11.27)