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

标签: jbpm 应用 task | 发表时间:2014-02-10 05:14 | 作者:a1314517love
出处:http://blog.csdn.net

task节点是最常用的节点之一,也因为执行任务的情况有很多种,所以他的用法也是多种多样的,本文主要讲解task的三种用法分别如下:

1.candidate属性。该熟属性在于task节点中,他的作用类似于组内工作分配,假如一个组内有两个人a1和a2,将该属性所在任务分配给两人中的一个后,则只有该任务被分配人才能看到任务,其他人都看不到。首先来看jpdl文件:

<?xml version="1.0" encoding="UTF-8"?>
  
<process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="290,1,48,48">
      <transition name="提交到任务A" to="任务A" g="-52,-20"/>
   </start>
   <end name="end1" g="309,338,48,48"/>
   <task candidate-groups="mgr" name="任务A" g="272,84,92,52">
      <transition name="提交到任务B" to="任务B" g="-52,-20"/>
   </task>
   <task name="任务B" g="278,171,92,52">
      <transition name="提交到任务C" to="任务C" g="-52,-20"/>
   </task>
   <task name="任务C" g="286,255,92,52">
      <transition name="通过" to="end1" g="-50,-20"/>
   </task>
</process>

注意上面的jpdl文件中存在candidate-groups属性,其值为“mgr”,这样在后台对应创建该组并为该组添加组员的java代码如下:

public class TestTask3 extends JbpmTestCase implements JbpmUtil {

	@Override
	public void deploy() {
		super.startUp();
		String group = identityService.createGroup("mgr");
		identityService.createUser("a1", "tom", "uu");
		identityService.createUser("a2", "tom2", "uu2");
		identityService.createMembership("a1", group);
		identityService.createMembership("a2", group);
		
		repositoryService.createDeployment().addResourceFromClasspath("com/tgb/node/task/Candidate/task3.jpdl.xml").deploy();

	}

	@Override
	public void createInstance() {
		super.startUp();
		ProcessInstance processInstance = executionService.startProcessInstanceByKey("task");
		print("流程实例ID",processInstance.getId());

	}

	@Override
	public void getTask() {
		super.startUp();
		//把任务分配给a1
		taskService.takeTask("20002", "a2");
		List<Task> tasks = taskService.findPersonalTasks("a2");
		print("任务数量",tasks.size());
		print("任务名词",tasks.get(0).getActivityName());
		print("任务ID",tasks.get(0).getId());
	}

	public void getGroupTask(){
		super.startUp();
		List<Task> tasks = taskService.findGroupTasks("a2");
		print("任务数量",tasks.size());
		print("任务名词",tasks.get(0).getActivityName());
		print("任务ID",tasks.get(0).getId());
	}
	@Override
	public void completeTask() {
		super.startUp();
		taskService.completeTask("350001");
	}

}
需要注意的是在我们部署流程的时候就创建了两个组员a1和a2,并且将这两个人加入到了mgr组,当执行创建流程以后由于改组得到了任务,但是这个任务没有分配给具体的组员,所以凡是这个组的组员都可以看到这个任务,也就是说当执行getGroupTask()的时候,无论是a1还是a2都有共同的任务,但是当执行getTask()把任务分配给a2以后,组任务也就随之消失,这时执行getGroupTask()函数无论参数是a1还是a2都获取不到任务了。原因就在于没分配之前是组任务,分配之后变成了私人任务,组任务这个概念也就没有了。只有在执行getTask()并且参数为a2的时候才能看到此任务。

2.task节点的handler属性。该属性的作用是动态分配assignee,其实在前面的文章中介绍过,这里就不详细描述了,有兴趣的可以参考 《JBPM具体应用之EL表达式动态分配assignee》这篇文章。

3.task节点的swimlane属性。在现实中,很可能有这种情况存在:首先由A执行任务task1,然后由B执行task2,然后再由A执行task3,我们可以看到task1和task3的执行人都是A,在这种情况下采用swimLane属性,我们就不必在task1和task3中分别指定assignee了。具体的jpdl文件如下:

<?xml version="1.0" encoding="UTF-8"?>
  
<process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl">
   <swimlane name="mySwim" assignee="U1"></swimlane>
   <start name="start1" g="290,1,48,48">
      <transition name="提交到任务A" to="任务A" g="-52,-20"/>
   </start>
   <end name="end1" g="309,338,48,48"/>
   <task swimlane="mySwim" name="任务A" g="272,84,92,52">
      <transition name="提交到任务B" to="任务B" g="-52,-20"/>
   </task>
   <task assignee="U2" name="任务B" g="278,171,92,52">
      <transition name="提交到任务C" to="任务C" g="-52,-20"/>
   </task>
   <task swimlane="mySwim" name="任务C" g="286,255,92,52">
      <transition name="通过" to="end1" g="-50,-20"/>
   </task>
</process>
从上面的jpdl配置中我们可以看到,首先有一个swimLane标签,这就是我们所建的名为“mySwim”的泳道,在“任务A”和“任务C”中都存在swimLane属性,其值都为“mySwim”,这表明这两个人都在泳道mySwim中,也就是说这两个任务的执行人为同一个人。


作者:a1314517love 发表于2014-2-9 21:14:03 原文链接
阅读:50 评论:0 查看评论

相关 [jbpm 应用 task] 推荐:

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

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

强大、简洁、优雅、免费——iPhone应用Task This

- king - 葡挞生活
iPhone上的To-do软件看过试过不少,最好的那几款都是收费的,免费版本都有诸多限制;纯免费的软件经常缺这少那,设计也很多不合理之处. 然而这一切终于改变了——因为有了Task This.. 功能强大和界面简洁似乎常常水火不容. 每当整理收集箱的任务时,看着一长串需要填写的选项,总不禁有几分烦闷.

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_ 获取所有的转向.

Task运行过程分析

- - 互联网 - ITeye博客
Map Task分解成Read、Map、Collect、Spill、Combine五个阶段,Reduce Task分解成Shuffle、Merge、Sort、Reduce、Write五个阶段. Read阶段:Map Task通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value;.

Jbpm工作流引擎学习日志

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

Hadoop中Speculative Task调度策略

- - 董的博客
Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce/hadoop-speculative-task/. Speculative Task思路是以空间换时间的,同时启动多个相同task,哪个完成的早,则采用哪个task的结果,这样明显可以提高任务计算速度,但是,这样却会占用更多的资源,在集群资源紧缺的情况下,合理的控制Speculative Task,可在多用少量资源情况下,减少大作业的计算时间.

backlogs自定义task的状态

- - CSDN博客研发管理推荐文章
这点完胜IceScrum,在多人协作的时候,不同的角色需要围绕着一个task协作. 这时候,默认的状态可能不够用或者. 一些人提出要可以定制两个状态,比如QA verified. 其实熟悉Redmine的人可以直接定制. 我已经回答了该issue,下面是测试样例的截屏:. 作者:sheismylife 发表于2014-2-11 21:16:30 原文链接.