浅谈对工作流的认识
——工作流引擎
一、工作流概念
WorkFlow:自动运作的业务过程部分或整体,表现为参与者对文件、信息或任务按照规程采取行动,并令其在参与者之间传递。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。
WFMS:workflow management system-工作流管理系统,以规格化的流程描述作为输入的软件组件,它维护流程的运行状态,并在人和应用之间分派活动
BPM:business process management-业务流程管理,范围比较广,相比之下工作流多半局限于技术领域。业务流程管理还从管理人员的角度涉及了非技术问题,比如分析、组织的效率
二、工作流作用
如何在将用户业务相关问题域映射到与实现技术相关的面向对象体系架构,而又同时保证映射的准确性和灵活性,通过构建基于工作流和规则驱动的软件体系架构是最终解决之道。
1、整合所有的专门业务应用系统,使用工作流系统构建一个灵活、自动化的EAI平台
2、协助涉及多人完成的任务提高生产效率。
3、提高固化软件的重用性,方便业务流程改进
4、方便开发,减少需求转化为设计的工作量,简化维护,降低开发风险
5、实现的集中统一的控制,业务流程不再是散落在各种各样的系统中。
6、用户可根据变化的业务进行方便的二次开发
三、工作流规范
XPDL:工作流管理联盟WFMC(Workflow Management Coalition),工作流领域第一个致力于标准化工作的组织,开始于1993年,发布了参考模型和XPDL(XML过程定义语言)规范。
JSR 207: Java的流程定义 -是由Java Community Process (JCP) 发起,如何在J2EE应用服务器中实现业务流程自动化的标准
Workflow management facility:OMG基于WfMC规范,定义如何向CORBA转换。
BPSS:ebXML
BPML & BPQL: BPMI
BPEL:微软、IBM等提出的
三、工作流系统
1、开源项目
wfmOpen:WfMC和OMG基于workflow facility的工作流引擎的J2EE实现
OFBiz:基于WfMC和OMG的规范,使用XPDL作为流程定义语言。
ObjectWeb Bonita:符合WfMC规范、灵活的协同工作流系统
Open Business Engine:Java工作流引擎,支持WfMC规范
XFlow / jBpm / OpenEbXML / Werkflow / OSWorkflow / …
2、商业项目
IBM:holosofx BPM。
Bea:WLI
Fujitsu:i-Flow
SAP:NetWeaver
Ultimus
…
四、工作流入门
1、流程定义的四个层次
状态层:所有状态和控制流的表述,都属于业务流程的状态层。状态定义了一种对外部提供结果的依赖。
上下文层:流程上下文变量(process context variable) ,或简称变量,是与流程实例相关的变量。流程开发人员可以使用流程变量存储跨越流程实例整个生命周期的数据。
程序逻辑层:在流程运行过程中,工作流系统响应指定的事件(event)执行的一段程序逻辑
用户界面层:参与者通过事件,来改变一个状态的用户接口。
2、状态层
流程定义:一个业务流程或过程的规格化描述
流程实例:流程定义的一个运行实体
活动:流程定义通常用一些活动表述,包括状态和动作。状态是各个审批环节,又叫节点,在流程运行时,流程引擎必须等待,直到外部参与者通知工作流管理系统指定的状态完成。链路:状态之间的连接路径,必须定义执行的条件。动作是流程运行过程中指定的事件发生时,引擎启动并执行的程序逻辑
节点实例:流程实例中的某个环节
参与者:状态对外部提供结果的依赖,譬如部门或人
3、上下文层
流程参数:流程在每个状态处理中的输出变量,在流程模板中要用到它
流程变量:流程在每个状态处理中的输入变量。它在链路的条件定义中使用,并贯穿整个流程引擎的使用过程
4、程序逻辑层
流程模板:一个核心流程引擎类。每一个流程都会用的一些公有方法在模板里都有实现。如目前流程模板就实现了初始化、流程启动、启动前、启动后、节点前处理、节点后处理、流程结束处理等。也定义了审批、追回、打回、撤消、强制办结
5、用户界面层
一个用户使用流程的界面:定义了审批、追回、打回等的多个界面,同时包括多个通用的操作:审批、追回、打回、撤消、强制办结等
一个流程定义的界面:是一个流程配置界面
五、流程提高篇
1、状态类型
1.1、按对外部依赖来分
人员:即该状态的外部依赖者是人或岗位或部门,它必须由人手动提交方能流转;
自动:不依赖外部,能够自动流转,不需手动提交
虚拟:链路汇聚点,不记录其值
1.2、按流程过程分,一个完整的流程至少包括开始与结束两个状态。
开始状态
执行中状态
结束状态
2、流程执行
2.1、流程启动
流程模板启动
流程启动
2.2、流程终止
当前流程的下一结点是结束结点时
审批中不同意
执行了打回给拟稿人并结束时
2.3、流程流转
审批同意进入下一节点
超时处理
会签处理
平级转发处理
追回处理
暂存处理
打回处理
撤消处理
3、流程精通篇
3.1、自由流程
流程启动,启动多个满足条件的活动实例,如果只有一个,继续,否则供前台选择,并停止未被选择的实例,依次循环,直到办结
3.2、同步流程
多个分支同时满足条件而启动,则最先满足的状态必须等待
3.3、异步流程
不会阻滞,同时进行
3.4、父子流程
4、流程开发篇
4.1、6张表
1) 流程定义表,定义区政府发文流程及处理模板。
2) 流程实例表,某一公文发起时,增加一个实例
3) 节点定义表,定义5个节点及节点适用
4) 节点实例表,每流经一个节点,启动一个实例
5) 链路定义表,定义节点流向及执行条件
6) 工作项表,定义动作处理信息
4.2、2个类--流程引擎。
0 同意;
1 否决;
2 撤消
3 打回上节点
4 打回拟稿人结束
5 打回拟稿人继续
6 打回任意节点提交
7 打回任意节点继续
8 追回
9. 启动
10 结束
4.3、2个类--流程模板
1. 流程启动事件:initialize()/preStarter(),从规则库中加载变量,将当前公文的状态置为已启动。
2. 同意事件:postApprove()/preApprove()
3. 否决、撤消事件:finish()
4. 打回上节点事件:
5. 打回拟稿人结束事件:
6. 打回拟稿人继续事件:
7. 打回任意节点提交事件:
8. 打回任意节点继续事件:
9. 追回事件:
10. 流程结束事件:finish(),将当前公文的状态置为已审批结束
六、流程引擎类核心操作分析
1. 由流程id的开始节点查询下一节点下一处理人--queryByPid
2. 由节点实例id查询下一节点下一处理人--queryByAiid
3. 流程启动—start
4. 同意--approve
七、 流程模板类核心操作分析
1. 流程启动—start
2. 同意--approve
三个界面
1. 工作流引擎界面
2. 个人办公界面
3. 模块与工作流关联界面
要修改生成的 table_edit.jsp
五个Command
1. 流程启动操作
2. 流程启动提交操作
3. 流程列表查询操作
4. 流程同意操作
5. 流程同意提交操作
以上。不足之处敬请指正。