一种基于WSS的公文审批系统的设计和实现2007年6月第23卷第2期陕西理工学院JournalofShaanxiUniversityofTechnologyJune.2oo7Vo1.23No.2[]1673—2944(2007)02—0033—05一种基于WSS的公文审批系统的设计和实现王新房,王福环,(1.西安理工大学自动化与信息工程学院,陕西西安710048:2.西安理工大学计算机科学与工程学院,陕西西安710048)[摘要]利用WSS的可扩展性和它提供的服务器端对象模型以及它与InfoPath完全集成的特性,设计实现了一个公文审批系统,判断文档库的服务器端事件类型,异步处理文档库的插入,删除和更新事件,确保只有合法的用户才能删除,更新文档,保证工作流的正确流向.系统实现了基于WSS和InfoPath的公文审批工作流模型,提供一种开发工作流的思想方法.[关键词]WSS;WSS事件;事件池;全局程序集缓存(GAC)[]TP311.52[文献标识码]A随着信息化的发展,各行业对工作流技术和文档协同操作应用的需求变得越来越普遍.很多文献对工作流的理论和模型进行了研究,各大软件公司也推出了相应的开发工作流应用的平台和工具,其中微软WindowsServer2003中包含的wSS(WindowsSharePointServices)就是为开发工作流应用和文档协同操作应用设计的,它提供给开发人员很方便的应用程序接口.使用WSS作为开发平台既可以充分利用WSS提供的功能简化开发过程,节省开发资金,又可以一定程度上保证系统的性能.本文以WSS作为开发平台,集成InfoPath,结合一个具体实例,给出一个开发工作流应用的完整过程.1问题描述限于篇幅,本文给出一个简化的公文审批流程模型,如图1所示.起草人填写申请,然后提交给领导A.A如果审批通过则把申请提交给上一级领导B;否则,把申请返还给申请人让他重新修改或删除.领导B如果审批通过则把公文发送给申请人,通知他申请通过了;否则,返回给下一级领导A,重新审批.利用InfoPath制作如图2的公文模板,并将该模板发布为WSS的InfoPath表单库.起草人填写完申请后要在下一步递交给下拉列表中选择公文的第一个审批人(领导A);领导完成审批后也要在列表中选择下一个审批人或是起草人,保证工作流的正确流向,驱动工作流的执行.2解决方案2.1InfoPath辅助数据源的开发如图2的InfoPath模板的下拉列表控件显示WSS站点所有用户的用户名.为了实现该功能,模板在发布到WSS站点前,下拉列表控件要绑定到一个的辅助数据源.这个辅助数据源可以是WSS后台数据库的用户信息表,也可以是一个返回用户信息的Web服务.出于系统安全等多方面因素的考虑,InfoPath模板不宜直接连接到WSS的数据库.本系统利用WSS提供的应用程序接口开发一个Web服务作为InfoPath模板的辅助数据源.这个Web服务只有一个UserName函数来返回所有用户的用户名.收稿日期:2006—11—24作者简介:王新房(1962一),男,陕西蒲城人,西安理工大学教授,博士,主要研究方向为计算机网络,reb服务,智能信息控制.陕西理工学院第23卷图1工作流模型2.2WSS文档事件图2InfoPath表单模板界面目前,WSS版本的文档库的服务器端事件有签人,签出,取?肖签出,插入,复制,重命名,更新,删除等.开发一个用户的事件处理类,又叫做事件池,处理这些服务器端事件,事件发生时,通知它执行相应的处理.这个事件池用来处理指定文档库的事件.事件池和文档库是一对多的关系,可以有多个WSS文档库被指定为同一个事件池的事件产生者.一个文档库仅有一个事件处理池.这种一对多的关系意味着所有的对文档库事件处理逻辑必须封装在一个单独的事件池里.为了保证工作流的正确流向,事件池处理文档的更新,删除等事件.文档更新时,通过判断进行更新操作的用户是否是原文档下步递交给下拉列表的值,如果是,允许更新并保存;否则,不保存更新痕迹.删除文档时,首先判断进行删除操作的用户是否是文档的作者,是,则删除之;否,则不响应需求.但是,由于事件是异步执行的,文档只有被删除或修改后,事件池才能被通知执行相应的处理操作.这时,文件的相关信息已经在后台数据库中被删除或修改,导致文档不能拒绝非法用户的修改和删除.为了解决上述问题,本文提供的解决方案是创建一个文档库的镜像库,如图3所示,用来存贮文档库所有文档的副本.当在文档库中插入文件时,事件池对象会把文件复制到镜像文件库,保持两个文档库的一致性.当一个...