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的主要组成。
–
相关文章:
hansen.wang said on 二月 22, 2009
@aronezhang
等着和你做项目等到花儿谢了又开了 老大 这个项目结束后 把我招到你那边去吧 呵呵! 我java基础还在的
aronezhang said on 二月 19, 2009
不说都忘记了,原来你搞过jBPM的啊,看来下次要找你做项目!
hansen.wang said on 二月 19, 2009
让我回忆起大学用jBPM做的一个简单请假流程,然后在简历中加了项workflow 呵呵!顶老大
张赫 said on 二月 18, 2009
牛人啊,顶。 狂顶 哈哈