JBPM学习(一):实现一个简单的工作流例子全过程

标签: jbpm 学习 工作流 | 发表时间:2014-05-02 17:32 | 作者:v123411739
出处:http://blog.csdn.net

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 出现一条记录


作者:v123411739 发表于2014-5-2 17:32:34 原文链接
阅读:93 评论:0 查看评论

相关 [jbpm 学习 工作流] 推荐:

Jbpm工作流引擎学习日志

- - 行业应用 - ITeye博客
     jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储. 下载地址:http://pan.baidu.com/s/1ntr8t6L.     安装gpd、配置runtime环境、导入jbpm所需的jar包、创建配置文件jbpm.cfg.xml和jbpm.hibernate.cfg.xml.

JBPM学习(一):实现一个简单的工作流例子全过程

- - CSDN博客综合推荐文章
<transition g="-69,-22" name="to 员工提交申请" to="员工提交申请"/>. <task assignee="员工" g="223,84,92,52" name="员工提交申请">.

JBPM表结构

- - CSDN博客综合推荐文章
      JBPM全称——Java  Business PrcessManagerment(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开放的、灵活的、易扩展的可执行流程语言框架.        (1)它的业务逻辑定义没有采用目前的一些规范,而是采用了它自己定义的Jboss Jbpm Process Definition Language(jpdl).

jbpm环境搭建

- - 编程语言 - ITeye博客
   使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现.    工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递.   jbpm 即java Business Process Management,是基于java的业务流程管理系统引擎底层基于Active Diagram模型.

JBPM之安装配置

- - Java - 编程语言 - ITeye博客
jbpm-4.X.zip) 下载下来,然后解压到你的硬盘上的什么地方. doc: 用户手册,javadoc和开发指南. examples: 用户手册中用到的示例流程. install: 用于不同环境的安装脚本. lib: 第三方库和一些特定的jBPM依赖库. jbpm.jar: jBPM主库归档. migration: 参考开发指南.

JBPM的表相关操作

- - 开源软件 - ITeye博客
--通过流程的编码获取该对应的流程定义. --通过单据号和ID获取任务实例(ID). --通过上条SQL的ID获取该实例下的所有任务. --通过上条SQL的ID获取该实例下的所有变量. --通过jbpm_processinstance 的 PROCESSDEFINITION_ 获取所有的节点. --通过jbpm_processinstance 的 PROCESSDEFINITION_ 获取所有的转向.

JBPM具体应用之task节点的使用

- - CSDN博客综合推荐文章
task节点是最常用的节点之一,也因为执行任务的情况有很多种,所以他的用法也是多种多样的,本文主要讲解task的三种用法分别如下:. 1.candidate属性. 该熟属性在于task节点中,他的作用类似于组内工作分配,假如一个组内有两个人a1和a2,将该属性所在任务分配给两人中的一个后,则只有该任务被分配人才能看到任务,其他人都看不到.

Activiti工作流demo

- - CSDN博客综合推荐文章
继上篇《 Activiti工作流的环境配置》.        前几篇对Activiti工作流进行了介绍,并讲解了其环境配置. 本篇将会用一个demo来展示Activiti工作流具体的体现,直接上干货.        以HelloWorld程序为例.       首先说一下业务流程,员工张三提交了一个申请,然后由部门经理李四审核,审核通过后再由总经理王五审核,通过则张三申请成功.

理解Git工作流

- joyoner - FeedzShare
来自: 黑客志 - FeedzShare  . 发布时间:2011年08月04日,  已有 2 人推荐. 如果你不了解Git背后的设计初衷,那么你正处在危险境地,当然有很多参数可以强迫Git按照你的意愿行事,但这并不是Git被设计的工作方式,这就好比你可以把改锥当锤子使用,并且它也可以完成工作,但这对改锥没什么好处.