基于J2EE的自适应城市管理行政审批系统的设计与实现
2013-11-29李先会
何 江,李先会
(1.杭州市数字城管信息处置中心,浙江杭州310003;2.杭州腾升网络科技有限公司,浙江杭州310013)
1 引言
“三分建设,七分管理”,城市管理工作与市民生活息息相关.综合利用信息技术和通信技术,整合各种业务和信息资源,建立网上行政审批平台,能有效促进城市管理水平和公共服务效能的提高,也符合中央“权力在阳光下运行”的要求.城市管理行政审批事项较多,包括行政许可、非行政许可、行政监管、行政征收等100多项,其中许多事项涉及市、区两级审批,因此系统数据模型设计应足够灵活,以满足市、区城市管理数据共享和联网审批的需求.同时根据中央行政权力下放的要求,系统也需要具备在线可视化流程配置、模板化的表单管理、在线可视化打印设置、图形化统计分析等功能,以适应较为灵活的系统配置以及决策支持需求.
为了开发安全、可靠、可扩展、高效的企业级应用系统,美国Sun公司推出了Java2平台企业版(Java 2 Platform Enterprise Edition,J2EE).J2EE平台可简化企业解决方案的开发、部署和管理,其所包含的各类组件、服务架构及技术层次均有共同的标准及规格,这使得依循J2EE架构的系统之间具有良好的兼容性[1].因此,本文拟基于J2EE平台,采用ExtJS以及Ajax等技术,构建一个面向数字城管的自适应行政审批系统.
2 数据模型设计
城市管理行政审批数据模型对象多、关系复杂.因此,在进行数据模型设计时首先要充分分析实际应用需求,然后按第三范式要求进行数据模型设计;其次要进行优化设计,通过适当数据冗余设计增强系统的操作性能[2].该系统的数据模型主要包含两部分:系统配置数据模型对象包括组织机构、用户、角色、权限、权力事项、申请材料、审批流程、审批环节、审批动作、数据字典、表单模板、文书模板以及打印模板等;系统运行数据模型对象包括业务项目、业务环节、提交材料、数据信息、过程文书以及监察发牌等,其实体关系如图1所示.
图1 主要数据模型对象及关系示意图
该系统主要数据模型关系描述如下:(1)用户、角色和权限间的关系.为了实现系统灵活的组合权限管理控制功能,用户与角色、角色与权限之间的关系都是多对多关系.权限分为简单权限和组合权限,以适应按数据类型值进行权限控制.(2)权力事项与审批流程间的关系.审批流程的配置管理支持版本控制,一个权力事项可以对应多个审批流程,但当前有效的审批流程只能有一个,其他为历史审批流程.(3)审批环节与表单模板间的关系.表单模板可以对应到审批环节,从而实现不同的环节管理或查看相应的数据项.(4)表单模板与打印模板间的关系.打印模板直接依附于需要打印输出的表单,框架直接把表单数据提供给打印模板管理组件,从而实现在线可视化的打印模板设置以及打印.(5)运行数据模型间的关系.运行数据模型间关系相对比较简单,以业务项目(审批项目)为基本实体对象,以一对多对应到业务环节、提交材料、数据信息、监察发牌等对象实体,这些实体间的关系同时维系了对应配置实体间的关系.
3 模型实现
基于J2EE 的城市管理行政审批系统以Oracle作为后台数据库,对Oracle BPEL工作流、FreeMarker进行封装集成,同时综合应用ExtJS的界面控件及Ajax技术,实现可视化的配置管理,充分发挥了B/S架构的优越性.下文对系统中的工作流管理、表单管理、打印设置和统计分析等关键功能的具体实现进行说明.
3.1 工作流管理的实现
Oracle BPEL流程管理器提供了成熟的工作流创建、部署、运行和监控功能,并提供多种形式的开放应用接口,对于常规正常工作流可以方便地进行应用集成,但对于非正常的流程流转例如撤销、退回等则不能满足要求.因此,系统在使用接口进行功能集成的同时,也对数据库表进行了部分直接操作,以满足特别流程需求.
对Oracle BPEL流程封装按如下接口进行同步调用实现:
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;
}
系统在充分利用Oracle BPEL流程控制功能的同时,为了控制的方便性与灵活性,除了存储流程运行关系外,还存储了流程运行的环节、人员、时间、时限及其他的业务需求信息,如环节是否可以退出、撤销、是否计时等.审批流程运转时,首先调用上述流程封装接口,执行Oracle BPEL工作流运行操作;然后更新存储获取的流程运行过程和结果信息,以保证核心与扩展的一致性.
同时,为了方便流程的配置管理,在线工作流配置界面采用了矢量可标记语言技术(The Vector Markup Language,简称VML),实现了流程的图形化管理(见图2).
图2 可视化流程配置
3.2 表单管理的实现
本系统表单主要包括审批过程中的数据表单与审批文书表单两类.表单管理要实现表单数据、表单模板与审批业务或审批业务环节的对应[3-4],根据配置信息应用FreeMarker模板动态构造输出表单界面.
为了能在发布FreeMarker模板时就能校验配置的正确性,需对FreeMarker模板的应用方式进行封装.系统规定应用模板的数据都由接口实现类提供,并在发布保存模板的同时要求给出相应的数据提供类,以便用该数据提供类的实例进行模板应用测试.相应的模板在实际应用时也使用该数据提供类的实例,这样就能保证发布保存成功的模板运行应用时的正确性.
FreeMarker模板的数据提供类接口定义如下:
public interface TemplateProcess{
public Object getRootMap(Object paramMap,JDBCWrapper jw)throws Exception;
}
其中,paramMap为Map实例,包含了模板应用时对应的实例数据信息;JDBCWrapper是数据库连接封装类,支持完整的事务控制.实现类根据实例数据信息准备模板需要的数据信息,并以Map实例返回,供FreeMarker模板使用.
具体模板应用方法定义如下:
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函数,对FreeMarker的Configuration实例进行了封装与缓存;TemplateItem类则对Template类进行了扩展,增加了对应的数据提供类名的字符串属性.
3.3 可视化打印设置的实现
可视化打印模板采用ActiveX控件进行管理.该ActiveX控件一方面对报表组件功能进行封装,实现打印模板的在线可视化管理功能;另一方面提供接口方法,接收XML格式数据,并把XML格式数据转换为ADO数据记录集,为报表组件提供数据源.
系统采用JavaScript对象对ActiveX控件进行封装,将报表控件的操作简化为JavaScript对象的操作,结合XML格式的打印数据源,从而实现了在线设置、预览及打印功能.
3.4 统计分析的实现
系统的界面采用ExtJS进行设计实现.ExtJS拥有丰富的UI控件,页面加载完成即运行JavaScript程序构造用户界面,并自动初始化默认统计条件提交一个AJAX请求,把条件数据提交给服务端;数据处理结果以JSON格式返回页面,再由JavaScript程序进行展示.具体过程如下:(1)注册页面加载完成后,调用初始化函数Tj.readyHandler;(2)初始化函数调用包含构造界面的ExtJS代码,初始化参数输入控件及按钮;(3)用户选择统计日期范围后点击统计按钮,程序通过Ext.Ajax.request函数以Ajax请求方式把日期范围提交到服务端;(4)服务端接收到界面请求后进行处理,并把处理结果数据以JSON格式输出到客户端;(5)客户端接收到返回数据后,利用Highcharts进行图形化显示.
4 结语
基于J2EE的自适应城市管理行政审批系统具有在线可视化流程配置、模板化表单管理、在线可视化打印设置以及图形化统计分析等功能,不仅可满足城市管理数据共享和联网审批需求,而且在不影响已有运行业务的情况下可进行动态调整.然而系统还存在一些不足,今后有必要进一步改进完善工作流与表单应用功能,增强通用性与扩展能力,以满足更加复杂的业务需求.
[1]余浩东.J2EE应用框架设计与项目开发[M].北京:清华大学出版社,2008:1.
[2]胡永昌.基于轻量级容器的J2EE开发研究与应用[D].成都:电子科技大学,2007.
[3]唐文忠,莫伟栋.基于共享模型的工作流表单系统设计[J].北京航空航天大学学报,2008,34(4):391-395.
[4]殷旭廖斌,张志华,田英爱.基于AJAX工作流表单的研究与应用[J].计算机应用与软件,2010,27(3):75-77,109.