Jbpm推出来时,我自己曾经写过一个基于关系数据库的工作流引擎,并且应用与几个中、小型项目,效果尚算不错。后来发现一个开源的轻量级工作流引擎--Jbpm工作流引擎,看过相关资料后,觉得Jbpm可以满足许多项目对流程的要求,于是尝试在项目中使用。
Jbpm是一个目前应用非常广泛的开源工作流引擎,但是如何把他应用到我们的具体业务系统呢?
业务系统与Jbpm结合大抵有两大部分工作要做:第一是设计流程并把该流程与实际的业务模块进行关联,第二业务流转时根据流程与业务模块的关联信息进行流转。
一、流程设计及其与业务模块的关联
1、录入并保存流程的基本信息,包括:流程名称、流程标识、对应的业务模块、业务模块表单的字段等。
2、使用流程设计器(公司同事用Flex编写了一个图形化流程设计器)绘制流程图(最终保存为JPDL语言的xml文件)。
3、为流程图相应的节点设置属性,例如:设置节点的表单字段读写控制、处理者的选择范围等信息。
4、验证并发布流程。
二、业务流转
1、新增业务数据保存时,启动流程的过程:
1)根据流程设计时设置的流程与业务模块的关联标识,获取最新的流程定义ID;
2)根据流程定义ID获取流程定义对象,然后根据流程定义对象创建新的流程实例;
3)创建流程实例与业务数据的关联;
4)创建开始节点的任务实例;
5)为新创建的任务实例设置任务处理者以及设置流程相关变量;
6)创建流转轨迹;
7)触发离开节点的动作。
2、业务数据编辑后流转的过程:
1)解析页面传入的流转配置参数,例如:当前Jbpm任务实例ID,下一个Transition名、处理者等;
2)根据Jbpm任务实例ID,获取任务实例;
3)判断该任务实例对应节点的一些处理规则并做相应的逻辑处理,例如:节点的处理规则为“其中一个处理者完成任务后,其他任务处理者不需要处理即可流转”,则需要做的逻辑处理是更新流转轨迹并运行到下一步;
4)把下一个节点的处理者设置到流程变量中,以便流转进入下一个任务节点时触发为创建新任务;
5)为新任务节点创建任务以及更新流转轨迹;
6)调用任务实例的方法,触发流转流转。
三、业务流程回收
很多单位(特别是政府机关单位)在使用业务流程时,流程回收是不可避免的必需功能。例如:某位工作人员在分发一份文件后,发现分发给不应该分发的人员,这时工作人员需要对这份文件进行回收,然后再重新分发。我们的流程回收功能是通过流转轨迹(我们扩展了一些功能),手工的把Jbpm的Token回拨到对应的节点。
总的来说,调用Jbpm工作流引擎来进行任务流转并不复杂,复杂的是如何与具体的业务需求相关联,因为许多业务系统的最终用户的需求千差万别,灵活多变。