jBPM开发:实现一个简单的审批流程
二月 18, 2009 in Java开源
本文使用jBPM自带的身份认证组件模型来实现一个简单的审批流程,其中使用到的技术点在本文中暂且
不解释,就先来一个先睹为快,对jBPM最常用的功能有一个感性的认识,在后面的文章中慢慢解释各个技术点,
进一步的加深jBPM的应用。
1,数据准备
jBPM的身份认证组件基于以下几张表:
- JBPM_ID_GROUP:组模型的层次关系
- JBPM_ID_MEMBERSHIP:模型组下的成员关系
- JBPM_ID_USER:成员信息
为了进行展示,我们先创建一些基础数据来测试后面创建的审批工作流
1 2 3 4 5 6 7 8 9 10 11 12 13 | insert into JBPM_ID_GROUP (ID_, CLASS_, NAME_, TYPE_, PARENT_) values (1, 'G', '资源管理室', 'UM', 2); insert into JBPM_ID_MEMBERSHIP (ID_, CLASS_, NAME_, ROLE_, USER_, GROUP_) values (6, 'M', null, 'role_superadmin', 1, 1); insert into JBPM_ID_MEMBERSHIP (ID_, CLASS_, NAME_, ROLE_, USER_, GROUP_) values (7, 'M', null, 'departmentManager', 2, 1); insert into JBPM_ID_USER (ID_, CLASS_, NAME_, EMAIL_, PASSWORD_) values (1, 'A', 'aronehome1', 'arone.lijun@gmail.com', '111111'); insert into JBPM_ID_USER (ID_, CLASS_, NAME_, EMAIL_, PASSWORD_) values (2, 'A', 'aronehome1', 'arone.lijun@gmail.com', '111111'); commit; |
2,定义流程
使用jBPM的流程定义向导来创建一个新的流程定义
- 首先在src/java目录下创建java包结构com.hand.processes
- 启动jBPM流程定义向导定义流程:表达式审批流程
Source Folder:jBPMDemo/src/java/com/hand/processes
Process Name:expression_approve - 选择左边工具面板中的图标,后点击右边的画布创建流程中的各节点
- 添加节点后使用
将各节点连接起来
完成后的效果如下图:
在<<Task Node>>审批任务节点中,右键选择审批任务节点,添加一个任务,如下图:
Task Name:审批
Assignment Type:Expression
Assignment Expression:group(资源管理室)–>member(role_superadmin)
这个表达式利用了jBPM自带的身份组件模型,只要指定组的名称和角色的名称,jBPM会自动找出符合条件的用户,并为她们创建任务实例。
上面的审批流程说明流程启动之后就等待一个任务的执行,这个任务由组为:资源管理室,并且角色为:role_superadmin 的用户,
因此我们上面的数据中找到的用户就是aronehome,流程会等待aronehome这个用户的一个动作之后才会继续往下执行,否则一直处于等待状态。
3,发布流程到数据库
由于jBPM流程运行的时候,它是从数据库中读取相关的流程定义信息,因此开发完成流程之后需要先将流程定义信息发布到数据中。
在Myeclipse设计器中选择Deployment,选择本地保存方式,先将流程定义文件和图片打包为zip文件,选择如下图点击“Save Without Deploying…”按钮
然后运行之前创建的“流程发布页面”:
http://localhost:7001/jbpmWeb/deploy.html
选择保存的zip文件,发布后可以到数据库中去验证流程是否成功。
1 | SELECT * FROM jbpm_processdefinition WHERE name_ = '表达式审批流程'; |
4,启动jBPM流程
启动流程可以采用如下的两种方法
- 使用jBPM控制台管理页面来启动流程(操作步骤省略)
- 编写测试脚本来启动流程,主要的启动代码:
1 2 | ProcessInstance processInstance = JbpmConfiguration.parseResource("jbpm.cfg.xml").createJbpmContext().newProcessInstance("表达式审批流程"); processInstance.signal(); |
5,查看流程执行图
先查询出流程中的任务实例ID(此SQL仅能用于开发中不严格的数据查询):
1 2 3 4 5 6 7 8 | SELECT id_, name_, actorid_ FROM jbpm_taskinstance WHERE token_ = (SELECT MAX(roottoken_) FROM jbpm_processinstance WHERE processdefinition_ = (SELECT MAX(id_) FROM jbpm_processdefinition WHERE name_ = '表达式审批流程')); |
运行之前创建的“流程执行情况查看页面”:
http://localhost:7001/jbpmWeb/showDiagram.jsp
输入上面SQL查询处理的taskinstance id,效果图如下:
上图说明流程执行到审批这个任务节点,等待用户做出响应。
下一篇文章开始描述jBPM的主要组成。
–
