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学习(一):实现一个简单的工作流例子全过程的更多相关文章

  1. JBPM工作流(一)——实现一个简单的工作流例子

    一.JBPM定义 JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可执行流 ...

  2. LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

    LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...

  3. Linux第三周学习总结——构造一个简单的Linux系统MenuOS

    第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  4. 一个简单的CORBA例子

    因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...

  5. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下   我们先来实现一个简单的例子,hello world ...

  6. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  7. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  8. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  9. 一个简单的cmake例子

    一个简单的cmake例子CMakeLists.txt,生成动态库文件,可以指定发布目录. 尚不支持: 1.交叉编译环境配置 2.添加依赖库   #在当前目录新建一个build目录,然后cd build ...

随机推荐

  1. 过生日,也要学学哈,这次是SHELL的GETOPTS

    今天是WEBSOCKET,, 先完成一个SHELL的GETOPS,周一就用得着. #!/bin/bash echo "usage: ./$0 -t (prism|opscripts)&quo ...

  2. java this 隐式参数

    第37级 this 是隐式参数, 类的方法调用时,会系统自动传递一个this的参数给方法.(这个参数是隐式传递的) 所以在方法里可以使用this这个参数. this在方法中表示对象. this(参数列 ...

  3. UVA 10608 Friends

    题目大意:共有n个人,m对人为已知的朋友关系,而且这种关系具有传递性,也就是A与B,B与C是朋友,可以确定A与C是朋友,求一个人数最多的朋友团体. bfs就可以了,遇到未访问的结点,加入队列并且朋人数 ...

  4. 李洪强漫谈iOS开发[C语言-015]-变量的使用

  5. *[topcoder]AstronomicalRecords

    http://community.topcoder.com/stat?c=problem_statement&pm=12804&rd=15706 首先A和B的长度都不一定一样,里面的元 ...

  6. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-007-定义切面的around advice

    一.注解@AspectJ形式 1. package com.springinaction.springidol; import org.aspectj.lang.ProceedingJoinPoint ...

  7. char和QChar(Unicode的编码与内存里的值还不是一回事)

    char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析.比如: char gemfield=’g’; 那么在由gemfield标记的这块内存的大小就是1个字节,信息就是01100111, ...

  8. Android Integer.decode()和Intger.valueof()

    decode合适用来分析数字 可以分析 8进:010=>分析后为 8 10进:10=>分析后为 10 16进:#10|0X10|0x10=>分析后是 16 而valueof    只 ...

  9. 多设备官方教程(6)控制多版本API

    Supporting Different Platform Versions While the latest versions of Android often provide great APIs ...

  10. 【HDOJ】1297 Children’s Queue

    递推,最近发现自己做递推的题总是没有思路.下周多练习.对于f(n)可以在第n个位置为男生,此时共有f(n-1)种情况:若在第n个位置为女生,因此第n-1个位置也必须为女生.此时有两种情况,一种情况是在 ...