工作流概要设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Document number 文档编号Confidentiality level 密级
内部公开Document version 文档版本
Total 25 pages 共25 页V1.0
流程详细设计
Prepared by
拟制王先红
Date
日期
2012-3-18
Reviewed by 评审人Date 日期
Approved by
批准Date 日期
1流程框架
1.1架构模式
流程采用一套独立的框架,与业务平台没有任何依赖。
其架构模式为:
1)采用log4j为日志框架。
2)单元测试使用junit4.0框架。
3)定义config.xml文件,所有的数据访问对象与业务逻辑对象的注册,外部接口的获取,均
配置在这里。
4)底层实体po包,封装所有数据库的表结构;
5)底层数据访问对象dao包,由一个接口类与一个通用的UDao类组成,即所有的数据操作
均由UDao去实现;
6)异常类均封装在exception包中;
7)业务逻辑封装在biz包中,这里是流程所有的对外调用接口,即业务平台与流程的接口都
定义在这里。
8)数据库的连接获取定义在db包,这里只管从业务平台获取连接,不包括连接的释放,事
务的提交与回滚。
9)一个连接工厂包,主要用来获取config.xml中的对象。
1.2主键生成器
在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。在许多数据库里面,都提供了ID生成的机制,如Oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的,所以需要找寻一种通用的方式。
如果用字符串的形式,在集群的时候就不行了,通常还需要加上IP的前缀,即IP + 时间+ 计数器,这个就是JA V A原版本的实现了。但是,这样这个ID就会太长了。
并且,字符串主键本身就存在效率问题,所以还是要考虑用数字主键,用一张表来保存,但取主键的时侯,必须用同步synchronized的方法来做,否则肯定会重复。值得注意的是非静态方法的synchronized用的是对象锁,每个线程都会创建一个新的对象,所以根本锁不住该方法。只有静态方法用的是类锁,才会锁住,所以需要用类锁或同步代码块来实现。
1.3时间类型
为了便于处理,数据库时间一律采用:4位年+2位月+2位日+2位时+2位分+2位秒=14位数字型,便于提高查询的效率,简化编程。
在DB2中,可用DECIMAL(m,n)数据类型,Oracle中用Number数据类型,Mysql中用Bigint 可达8字节,SqlServer中用bigint可达8字节,均能满足要求。
而在程序处理中,java可用long数据类型8个字节长来存储,不用转换为对象,大大提高了数据库处理端的效率和程序处理效率。
2流程配置
2.1界面技术选型
流程配置界面采用图形化技术开发,客户端应支持所有的浏览器和不同的版本。本工作流前端界面采用Flex技术开发。
2.2主界面
当在业务系统中点击流程配置或流程定义模块,弹出如下界面。
最上部是菜单栏;左侧是流程列表,流程、节点、路由属性栏;右侧上部是工具栏,用于选择绘制的节点,下部是绘图区域。
主界面中的属性,包括流程、节点、路由三部分。这些属性全部采用xml文件定义好,保存到本地,支持可扩展,不允许写死在代码中。节点属性的xml格式为:
< property name=”name” label=”节点名称” defvalue=”11” />
< property name=”type” label=”节点类型” defvalue=”22”/>
路由属性的xml格式为:
如下图
2.3流程角色
在左侧上部的树上增加流程角色项,让其位于流程列表项的下面。点击流程角色,右侧将显示所有已经定义好的角色。对于列表中的角色,可以新增、修改、删除。
什么是流程角色呢?流程中使用的人员集合,统称为流程角色。与业务系统的角色和岗位没有任何联系,专属于流程子系统。但必须在业务系统中为用户分配这些角色。
流程角色只有二个字段,与wf_post表对应,在节点定义表的{参与者角色}字段要用到流程角色,具体属性有:
✓角色编号
✓角色名称
2.4流程变量
在左侧上部的树上增加流程变量项,让其位于流程角色项的下面。点击流程变量,右侧将显示所有已经定义好的流程变量。对于列表中的变量,可以新增、修改、删除。
流程变量又叫业务要素,是将业务系统中某些重要的业务表的字段,视流程的需要,汇入本表,以便在流程定义的流程描述、节点定义的节点描述、路由定义的执行条件中引用这些变量,使流程的表现更丰富,业务规则更灵活。
当然本表也可以不需要,直接引用各业务表的相关字段,但这样势必与业务表紧耦合,实现了流程的硬编码,对于流程引擎极为不利。