何 江,李先會
(1.杭州市數(shù)字城管信息處置中心,浙江杭州310003;2.杭州騰升網(wǎng)絡(luò)科技有限公司,浙江杭州310013)
“三分建設(shè),七分管理”,城市管理工作與市民生活息息相關(guān).綜合利用信息技術(shù)和通信技術(shù),整合各種業(yè)務(wù)和信息資源,建立網(wǎng)上行政審批平臺,能有效促進城市管理水平和公共服務(wù)效能的提高,也符合中央“權(quán)力在陽光下運行”的要求.城市管理行政審批事項較多,包括行政許可、非行政許可、行政監(jiān)管、行政征收等100多項,其中許多事項涉及市、區(qū)兩級審批,因此系統(tǒng)數(shù)據(jù)模型設(shè)計應(yīng)足夠靈活,以滿足市、區(qū)城市管理數(shù)據(jù)共享和聯(lián)網(wǎng)審批的需求.同時根據(jù)中央行政權(quán)力下放的要求,系統(tǒng)也需要具備在線可視化流程配置、模板化的表單管理、在線可視化打印設(shè)置、圖形化統(tǒng)計分析等功能,以適應(yīng)較為靈活的系統(tǒng)配置以及決策支持需求.
為了開發(fā)安全、可靠、可擴展、高效的企業(yè)級應(yīng)用系統(tǒng),美國Sun公司推出了Java2平臺企業(yè)版(Java 2 Platform Enterprise Edition,J2EE).J2EE平臺可簡化企業(yè)解決方案的開發(fā)、部署和管理,其所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次均有共同的標(biāo)準(zhǔn)及規(guī)格,這使得依循J2EE架構(gòu)的系統(tǒng)之間具有良好的兼容性[1].因此,本文擬基于J2EE平臺,采用ExtJS以及Ajax等技術(shù),構(gòu)建一個面向數(shù)字城管的自適應(yīng)行政審批系統(tǒng).
城市管理行政審批數(shù)據(jù)模型對象多、關(guān)系復(fù)雜.因此,在進行數(shù)據(jù)模型設(shè)計時首先要充分分析實際應(yīng)用需求,然后按第三范式要求進行數(shù)據(jù)模型設(shè)計;其次要進行優(yōu)化設(shè)計,通過適當(dāng)數(shù)據(jù)冗余設(shè)計增強系統(tǒng)的操作性能[2].該系統(tǒng)的數(shù)據(jù)模型主要包含兩部分:系統(tǒng)配置數(shù)據(jù)模型對象包括組織機構(gòu)、用戶、角色、權(quán)限、權(quán)力事項、申請材料、審批流程、審批環(huán)節(jié)、審批動作、數(shù)據(jù)字典、表單模板、文書模板以及打印模板等;系統(tǒng)運行數(shù)據(jù)模型對象包括業(yè)務(wù)項目、業(yè)務(wù)環(huán)節(jié)、提交材料、數(shù)據(jù)信息、過程文書以及監(jiān)察發(fā)牌等,其實體關(guān)系如圖1所示.
圖1 主要數(shù)據(jù)模型對象及關(guān)系示意圖
該系統(tǒng)主要數(shù)據(jù)模型關(guān)系描述如下:(1)用戶、角色和權(quán)限間的關(guān)系.為了實現(xiàn)系統(tǒng)靈活的組合權(quán)限管理控制功能,用戶與角色、角色與權(quán)限之間的關(guān)系都是多對多關(guān)系.權(quán)限分為簡單權(quán)限和組合權(quán)限,以適應(yīng)按數(shù)據(jù)類型值進行權(quán)限控制.(2)權(quán)力事項與審批流程間的關(guān)系.審批流程的配置管理支持版本控制,一個權(quán)力事項可以對應(yīng)多個審批流程,但當(dāng)前有效的審批流程只能有一個,其他為歷史審批流程.(3)審批環(huán)節(jié)與表單模板間的關(guān)系.表單模板可以對應(yīng)到審批環(huán)節(jié),從而實現(xiàn)不同的環(huán)節(jié)管理或查看相應(yīng)的數(shù)據(jù)項.(4)表單模板與打印模板間的關(guān)系.打印模板直接依附于需要打印輸出的表單,框架直接把表單數(shù)據(jù)提供給打印模板管理組件,從而實現(xiàn)在線可視化的打印模板設(shè)置以及打印.(5)運行數(shù)據(jù)模型間的關(guān)系.運行數(shù)據(jù)模型間關(guān)系相對比較簡單,以業(yè)務(wù)項目(審批項目)為基本實體對象,以一對多對應(yīng)到業(yè)務(wù)環(huán)節(jié)、提交材料、數(shù)據(jù)信息、監(jiān)察發(fā)牌等對象實體,這些實體間的關(guān)系同時維系了對應(yīng)配置實體間的關(guān)系.
基于J2EE 的城市管理行政審批系統(tǒng)以O(shè)racle作為后臺數(shù)據(jù)庫,對Oracle BPEL工作流、FreeMarker進行封裝集成,同時綜合應(yīng)用ExtJS的界面控件及Ajax技術(shù),實現(xiàn)可視化的配置管理,充分發(fā)揮了B/S架構(gòu)的優(yōu)越性.下文對系統(tǒng)中的工作流管理、表單管理、打印設(shè)置和統(tǒng)計分析等關(guān)鍵功能的具體實現(xiàn)進行說明.
Oracle BPEL流程管理器提供了成熟的工作流創(chuàng)建、部署、運行和監(jiān)控功能,并提供多種形式的開放應(yīng)用接口,對于常規(guī)正常工作流可以方便地進行應(yīng)用集成,但對于非正常的流程流轉(zhuǎn)例如撤銷、退回等則不能滿足要求.因此,系統(tǒng)在使用接口進行功能集成的同時,也對數(shù)據(jù)庫表進行了部分直接操作,以滿足特別流程需求.
對Oracle BPEL流程封裝按如下接口進行同步調(diào)用實現(xiàn):
public interface IWorkflowClientService{
public void connect()throws Exception;
public void startInstance(String paramString,InputVariable paramInputVariable)throws Exception;
public IWorkflowContext getWorkflowContext(String paramString)throws Exception;
public List getTasksForUser(IWorkflowContext paramIWorkflowContext)throws Exception;
public Task getTaskDetailsById(IWorkflowContext paramIWorkflowContext,String paramString)throws Exception;
public void completeTask(IWorkflowContext paramIWorkflowContext,String paramString1,String paramString2)throws Exception;
public String getPayloadProperty(Task paramTask,String paramString);
public void setPayloadProperty(Task paramTask,String paramString1,String paramString2);
public void abortInstance(String paramString)throws Exception;
}
系統(tǒng)在充分利用Oracle BPEL流程控制功能的同時,為了控制的方便性與靈活性,除了存儲流程運行關(guān)系外,還存儲了流程運行的環(huán)節(jié)、人員、時間、時限及其他的業(yè)務(wù)需求信息,如環(huán)節(jié)是否可以退出、撤銷、是否計時等.審批流程運轉(zhuǎn)時,首先調(diào)用上述流程封裝接口,執(zhí)行Oracle BPEL工作流運行操作;然后更新存儲獲取的流程運行過程和結(jié)果信息,以保證核心與擴展的一致性.
同時,為了方便流程的配置管理,在線工作流配置界面采用了矢量可標(biāo)記語言技術(shù)(The Vector Markup Language,簡稱VML),實現(xiàn)了流程的圖形化管理(見圖2).
圖2 可視化流程配置
本系統(tǒng)表單主要包括審批過程中的數(shù)據(jù)表單與審批文書表單兩類.表單管理要實現(xiàn)表單數(shù)據(jù)、表單模板與審批業(yè)務(wù)或?qū)徟鷺I(yè)務(wù)環(huán)節(jié)的對應(yīng)[3-4],根據(jù)配置信息應(yīng)用FreeMarker模板動態(tài)構(gòu)造輸出表單界面.
為了能在發(fā)布FreeMarker模板時就能校驗配置的正確性,需對FreeMarker模板的應(yīng)用方式進行封裝.系統(tǒng)規(guī)定應(yīng)用模板的數(shù)據(jù)都由接口實現(xiàn)類提供,并在發(fā)布保存模板的同時要求給出相應(yīng)的數(shù)據(jù)提供類,以便用該數(shù)據(jù)提供類的實例進行模板應(yīng)用測試.相應(yīng)的模板在實際應(yīng)用時也使用該數(shù)據(jù)提供類的實例,這樣就能保證發(fā)布保存成功的模板運行應(yīng)用時的正確性.
FreeMarker模板的數(shù)據(jù)提供類接口定義如下:
public interface TemplateProcess{
public Object getRootMap(Object paramMap,JDBCWrapper jw)throws Exception;
}
其中,paramMap為Map實例,包含了模板應(yīng)用時對應(yīng)的實例數(shù)據(jù)信息;JDBCWrapper是數(shù)據(jù)庫連接封裝類,支持完整的事務(wù)控制.實現(xiàn)類根據(jù)實例數(shù)據(jù)信息準(zhǔn)備模板需要的數(shù)據(jù)信息,并以Map實例返回,供FreeMarker模板使用.
具體模板應(yīng)用方法定義如下:
public static void process(String cfgName,String tempName,Object paramMap,Writer out,JDBCWrapper jw){
Configuration fmConfig=getConfig(cfgName);
TemplateItem fmTemplate=fmConfig.getTemplate(tempName);
Object obj=SpringAppContext.getBean(templateItem.getProcessClassName(),TemplateProcess.class);TemplateProcess templateClass=(TemplateProcess)obj;
Object rootMap=templateClass.getRootMap(rootMap,jw);
fmTemplate.process(rootMap,out);
}
在此方法中使用的getConfig函數(shù),對FreeMarker的Configuration實例進行了封裝與緩存;TemplateItem類則對Template類進行了擴展,增加了對應(yīng)的數(shù)據(jù)提供類名的字符串屬性.
可視化打印模板采用ActiveX控件進行管理.該ActiveX控件一方面對報表組件功能進行封裝,實現(xiàn)打印模板的在線可視化管理功能;另一方面提供接口方法,接收XML格式數(shù)據(jù),并把XML格式數(shù)據(jù)轉(zhuǎn)換為ADO數(shù)據(jù)記錄集,為報表組件提供數(shù)據(jù)源.
系統(tǒng)采用JavaScript對象對ActiveX控件進行封裝,將報表控件的操作簡化為JavaScript對象的操作,結(jié)合XML格式的打印數(shù)據(jù)源,從而實現(xiàn)了在線設(shè)置、預(yù)覽及打印功能.
系統(tǒng)的界面采用ExtJS進行設(shè)計實現(xiàn).ExtJS擁有豐富的UI控件,頁面加載完成即運行JavaScript程序構(gòu)造用戶界面,并自動初始化默認統(tǒng)計條件提交一個AJAX請求,把條件數(shù)據(jù)提交給服務(wù)端;數(shù)據(jù)處理結(jié)果以JSON格式返回頁面,再由JavaScript程序進行展示.具體過程如下:(1)注冊頁面加載完成后,調(diào)用初始化函數(shù)Tj.readyHandler;(2)初始化函數(shù)調(diào)用包含構(gòu)造界面的ExtJS代碼,初始化參數(shù)輸入控件及按鈕;(3)用戶選擇統(tǒng)計日期范圍后點擊統(tǒng)計按鈕,程序通過Ext.Ajax.request函數(shù)以Ajax請求方式把日期范圍提交到服務(wù)端;(4)服務(wù)端接收到界面請求后進行處理,并把處理結(jié)果數(shù)據(jù)以JSON格式輸出到客戶端;(5)客戶端接收到返回數(shù)據(jù)后,利用Highcharts進行圖形化顯示.
基于J2EE的自適應(yīng)城市管理行政審批系統(tǒng)具有在線可視化流程配置、模板化表單管理、在線可視化打印設(shè)置以及圖形化統(tǒng)計分析等功能,不僅可滿足城市管理數(shù)據(jù)共享和聯(lián)網(wǎng)審批需求,而且在不影響已有運行業(yè)務(wù)的情況下可進行動態(tài)調(diào)整.然而系統(tǒng)還存在一些不足,今后有必要進一步改進完善工作流與表單應(yīng)用功能,增強通用性與擴展能力,以滿足更加復(fù)雜的業(yè)務(wù)需求.
[1]余浩東.J2EE應(yīng)用框架設(shè)計與項目開發(fā)[M].北京:清華大學(xué)出版社,2008:1.
[2]胡永昌.基于輕量級容器的J2EE開發(fā)研究與應(yīng)用[D].成都:電子科技大學(xué),2007.
[3]唐文忠,莫偉棟.基于共享模型的工作流表單系統(tǒng)設(shè)計[J].北京航空航天大學(xué)學(xué)報,2008,34(4):391-395.
[4]殷旭廖斌,張志華,田英愛.基于AJAX工作流表單的研究與應(yīng)用[J].計算機應(yīng)用與軟件,2010,27(3):75-77,109.