3.1系统需求分析
在最近几年的各级单位的信息化改造建设中,随着信息化基础设施建设的逐渐完备,各类应用系统开始受到各级单位的重视,开发重点主要侧重于人事信息数字化、文书信息化、公文流转、交互式审批等信息化可行性高的工作领域。因此,改革传统办公模式,开展电子办公,使业务办公、公文流转和管理过程电子化、信息化,并通过统一办公规范,提高工作效率降低办公成本,实现办公自动化已势在必行。
而上述所介绍的公文流转的一个重要特征就是流程复杂,难以用标准的程序化语言解释,因而公文流转系统必须有与之相适应的工作流程定义系统,使操作人员能够自主地设定公文流转流程。为此我们设计了一个可视化流程设计工具,该工具可以作为工作流管理系统里的一个模块。它具有图形用户界面,用户定义与任务执行完全分离,其体系结构基本上符合WFMC 标准结构。用户不需要程序员的支持就可以定义和设计出工作流程模型,根据该模型生成的文件可以非常方便地被解释为上层接口所需的工作流。
3.2 系统功能介绍
可视化OA工作流程设计工具针对用户的要求对工作流程进行定制和维护,主要包括:对接点、接点连接线可自由拖放。具备删除节点、节点之间连接线功能。接点之间采用箭头连接。接点采用矩形表示。图形内容利用XML形式保存于的Access数据库中,可查询,编辑,保存,更多自定义属性。
通过对用户需求的分析,要求本流程设计工具具有以下功能:
(1)可视化的操作界面;
(2)可以对流程节点和弧线进行填加、修改、删除操作;
(3)工作流程支持串签、会签和分支流程;
(4)可以将图形内容保存于access数据库或(xml)中,可查询,编辑,保存;
(5)可以通过流程模型解释接口和引擎主程序提供给上层程序使用
3.3 系统模块功能和设计思想
1994年11月,工作流管理联盟发布了工作流管理系统的参考模型,该模型定义了一个基本的工作流管理系统所需要的6个基本模块:过程定义工具,工作流执行服务,其他工作流执行服务,客户应用程序,被调应用程序,管理及监控工具;并制定了个模块之间的接口标准。
流程设计工具与其系统交互的简单模块关系图:
可视化流程设计工具各模块的功能描述和设计思想介绍:
(1)绘图模块:可将需要设计的流程用此模块画出,利用java.awt来绘制节点和弧线;
(2)图象关系序列化模块:可将已画出流程中的节点和弧线序列化,利用接口java.io.Serializable就能实现;
(3)图象关系保存模块:可将序列化后的节点和弧线关系保存起来供上层流程定义解释器使用。
3.4数据库设计
3.4.1 E-R图设计
实体关系图(E-R图)将系统中的数据模型以一种更加清楚、具体的方式展现出来。图中方框代表实体,椭圆代表实体的属性,实体和实体之间的关系用菱形来表示。
在工作流管理系统中,上层程序需要通过读取保存在数据库里流程的XML文件来实现流程的解释和实例化。在对工作流进行定义的工作中用到的E-R如下图所示:
3.4.2表的构建
表1 流程节点表(flow_Node)
对象名称 |
数据类型 |
功能描述 |
Node_ID |
数字 |
节点编号 |
Node_Nane |
文本 |
节点名称 |
Node_prev |
文本 |
节点前驱名称 |
Node_prevID |
数字 |
前驱节点号 |
Node_next |
文本 |
节点后继 |
Node_nextID |
数字 |
后继节点号 |
Flow_ID |
数字 |
节点所属的流程号 |
表2 流程表(flowdata)
对象名称 |
数据类型 |
功能描述 |
fileName |
文本 |
保存流程的文件名 |
id |
数字 |
流程号 |
type |
文本 |
Node 类型还是 line 类型 |
3.4.3数据库连接实现
public Connection getConnection(){
// now we can get the connection from the DriverManager
Connection con = null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//驱动 set this to a MS Access DB you have on your machine
String filename = "/fileData.mdb";
String database ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
database+= filename.trim() + ";DriverID=22;READONLY=true}";
// add on to the end
con = DriverManager.getConnection("jdbc:odbc:ccos" ,"","");
//数据源
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printSt