JBPM学习(一):实现一个简单的工作流例子全过程
test.png
test.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?> <process name="test" xmlns="http://jbpm.org/4.4/jpdl">
<start g="247,9,48,48" name="start1">
<transition g="-69,-22" name="to 员工提交申请" to="员工提交申请"/>
</start>
<end g="244,326,48,48" name="end1"/>
<task assignee="员工" g="223,84,92,52" name="员工提交申请">
<transition g="-93,-22" name="to 部门经理审批" to="部门经理审批"/>
</task>
<task assignee="部门经理" g="226,161,92,52" name="部门经理审批">
<transition g="-81,-22" name="to 总经理审批" to="总经理审批"/>
</task>
<task assignee="总经理" g="222,244,92,52" name="总经理审批">
<transition g="-50,-22" name="to end1" to="end1"/>
</task>
</process>
|
Task |
assignee |
|
员工提交申请 |
员工 |
|
部门经理审批 |
部门经理 |
|
总经理审批 |
总经理 |
1.部署流程定义
a) 通过直接拿到.jpdl.xml和.png方式部署
@Test
public void deployProcessDefinition() {
processEngine.getRepositoryService()//
.createDeployment()//
.addResourceFromClasspath("test.jpdl.xml")//
.addResourceFromClasspath("test.png")//
.deploy();
}
b) 部署完后,在jbpm4_ployment表中有一条记录;在jbpm4_lob表有两条记录,分别为test.jpdl.xml和test.png。
2.启动流程实例
a) 通过key启动流程实例,.jpdl.xml中key不写默认为name属性
@Test
public void startProcessInstance() {
processEngine.getExecutionService().startProcessInstanceByKey("test");
}
b) 启动流程实例后:jbpm4_execution表中有一条员工提交申请的活动记录,此时进行到to员工提交申请环节。
3.员工操作
a) 查询未办理的任务列表
@Test
public void findMyTaskList() {
// 查询任务
String userId = "员工";
List<Task> list = processEngine.getTaskService().findPersonalTasks(userId); // 显示任务
System.out.println("========= 【"+userId+"】的未办理的任务列表 =========");
for (Task task : list) {
System.out.println("id=" + task.getId()//
+ ", name=" + task.getName()//
+ ", assignee=" + task.getAssignee()//
+ ", createTime=" + task.getCreateTime());
}
}
b) 查看到信息如下:有一条任务id为20002
========== 【员工】的未办理的任务列表 =========
id=20002, name=员工提交申请, assignee=员工, createTime=2014-05-02 16:48:04.0
c) 员工办理任务:提交申请环节
@Test
public void completeTask() {
String taskId = "20002";
processEngine.getTaskService().completeTask(taskId);
}
d) 员工执行完任务,即员工提交申请环节结束,环节进行到to部门经理审批,此时员工再查询个人任务列表结果为空。
4.部门经理操作
a) 查询未办理的任务列表
@Test
public void findMyTaskList() {
// 查询任务
String userId = "部门经理";
List<Task> list = processEngine.getTaskService().findPersonalTasks(userId); // 显示任务
System.out.println("========= 【"+userId+"】的未办理的任务列表 =========");
for (Task task : list) {
System.out.println("id=" + task.getId()//
+ ", name=" + task.getName()//
+ ", assignee=" + task.getAssignee()//
+ ", createTime=" + task.getCreateTime());
}
}
b) 查看到信息如下:有一条任务id为30001
========== 【部门经理】的未办理的任务列表 =========
id=30001, name=部门经理审批, assignee=部门经理, createTime=2014-05-02 16:49:06.0
c) 部门经理办理任务:提交申请环节
@Test
public void completeTask() {
String taskId = "30001";
processEngine.getTaskService().completeTask(taskId);
}
d) 部门经理执行完任务,即部门经理审批环节结束,环节进行到to总经理审批,此时部门经理再查询个人任务列表结果为空。
5.总经理操作
a) 查询未办理的任务列表
@Test
public void findMyTaskList() {
// 查询任务
String userId = "总经理";
List<Task> list = processEngine.getTaskService().findPersonalTasks(userId); // 显示任务
System.out.println("========= 【"+userId+"】的未办理的任务列表 =========");
for (Task task : list) {
System.out.println("id=" + task.getId()//
+ ", name=" + task.getName()//
+ ", assignee=" + task.getAssignee()//
+ ", createTime=" + task.getCreateTime());
}
}
b) 查看到任务id为40001
========== 【总经理】的未办理的任务列表 =========
id=40001, name=总经理审批, assignee=总经理, createTime=2014-05-02 16:49:33.0
c) 总经理办理任务:提交申请环节
@Test
public void completeTask() {
String taskId = "40001";
processEngine.getTaskService().completeTask(taskId);
}
d) 总经理执行完任务,即总经理审批环节结束,环节进行到to end1,此时总经理再查询个人任务列表结果为空。
6.流程实例执行完毕,此时jbpm4_execution表为空,历史记录表:jbpm4_hist_procinst出现一条记录。
JBPM学习(一):实现一个简单的工作流例子全过程的更多相关文章
- JBPM工作流(一)——实现一个简单的工作流例子
一.JBPM定义 JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可执行流 ...
- LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...
- Linux第三周学习总结——构造一个简单的Linux系统MenuOS
第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- 一个简单的CORBA例子
因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...
- 轻松创建nodejs服务器(1):一个简单nodejs服务器例子
这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下 我们先来实现一个简单的例子,hello world ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)
使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...
- 一个简单的cmake例子
一个简单的cmake例子CMakeLists.txt,生成动态库文件,可以指定发布目录. 尚不支持: 1.交叉编译环境配置 2.添加依赖库 #在当前目录新建一个build目录,然后cd build ...
随机推荐
- UVA 10651 Pebble Solitaire 状态压缩dp
一开始还在纠结怎么表示一个状态,毕竟是一个串.后来搜了一下题解发现了这里用一个整数的前12位表示转态就好了 ,1~o,0~'-',每个状态用一个数来表示,然后dp写起来就比较方便了. 代码: #inc ...
- [wikioi]线段覆盖
http://wikioi.com/problem/1214/ 这道题也归为贪心了.我也不是很能分辨,但想法确实是:1.有阶段最优化性:2.前一状态和后一状态有关系. 想法:1.排个序是很自然的想法, ...
- 调色板QPalette类用法详解(附实例、源码)
http://blog.csdn.net/rl529014/article/details/51589096
- win8.1中如何获得管理员权限步骤
按WIN+R,运行对话框中输入gpedit.msc,开启组策略, 然后一步步地在"计算机配置"-"Windows 设置"-"安全设置"-&q ...
- Python Anaconda2 (64-bit) 安装后启动jupyter-notebook默认目录更改
看了网上很多关于更改 python notebook的,好麻烦,所以想了一招. python notebook 现在改名叫 jupyter-notebook ,被集成在Anaconda中. Anaco ...
- 360手机助手内部资料曝光,63张PPT纯干货
360手机助手内部资料曝光,63张PPT纯干货 日前,国内最大的安卓应用商店360手机助手发布了<2016年手机软件行业趋势绿皮书>,这份绿皮书对2015年以来移动互联网的趋势做了总结,展 ...
- BGP详解
相信各位站长在托管服务器或者选择虚拟主机的时候,提供商都会说他们的机房是双线机房,保证你的站点访问速度,那么这里所谓的双线机房到底是何意思,它又为何能提升站点的访问速度呢? 一遍小型机房的所谓双线路其 ...
- BZOJ1324: Exca王者之剑
1324: Exca王者之剑 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 256 Solved: 131[Submit][Status] Desc ...
- [解决] [centOS] g++ 带 -static 参数编译时,报错 /usr/bin/ld: cannot find -lm
静态编译时缺少某个库 yum install glibc-static 从这里找到的 http://www.linuxquestions.org/questions/linux-software-2/ ...
- Charles使用问题, iOS7的http代理(http proxy)配置不生效问题
Charles配合iOS7使用时, 发现iOS7的http代理(http proxy)配置不生效, 代理信息写完后, 系统没有自动保存. 解决方法: 将些wifi忽略, 重新连接, 再配置代理就好了.