`
五月天
  • 浏览: 21601 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jbpm4学习之任务分配

    博客分类:
  • jbpm
 
阅读更多

在jbpm4中,必须给任务分配参与者(assignee),我总结了下,有以下的几种方法

一,直接在jpdl.xml文件中指明参与者,如:

 <task name="review" g="280,146,92,52" assignee="zcl">
      <transition name="to wait" to="wait" g="-25,-25"/>
   </task>

 这样在程序中就可以直接使用zcl作为用户的id了。当然这并不常用。

二,通过使用流程实例变量获得

<task name="review" g="280,146,92,52" assignee="#{owner}">
      <transition name="to wait" to="wait" g="-25,-25"/>
</task>

 在程序中可以这样分配参与者:

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("owner", "zcl");
executionService.startProcessInstanceByKey("assignee", variables);

 三,通过流程实例变量的导航

<task name="review" g="280,146,92,52" assignee="#{order.owner}">
      <transition name="to wait" to="wait" g="-25,-25"/>
</task>

其中#{order.owner}相当于调用了order所代表类的getOwner()方法,因此首先得定义一个类,其中包括getOwner()方法,此类必须实现Serializable 接口。

public class Order implements Serializable {
	private String owner;
	public Order() {}
	public Order(String owner) {
		this.owner = owner;
	}
	public String getOwner() {
		return owner;
	}
	public void setOwner(String owner) {
		this.owner = owner;
	}
}

 在程序中这样指定:

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("order", new Order("zcl"));
executionService.startProcessInstanceByKey("assignee1", variables);

 四,通过实现AssignmentHandler接口来分配参与者

 <task name="review" g="280,146,92,52">
   <assignment-handler class="cn.zcl.jbpm4.task.assignee.AssigTask">
   	<field name="owner">
   	  	<string value="zcl"/>
   	 </field>
   </assignment-handler>
   <transition name="to wait" to="wait" g="-25,-25"/>
 </task>

 再定义AssigTask类

public class AssigTask implements AssignmentHandler {
	private String owner;
	@Override
	public void assign(Assignable assignable, OpenExecution execution)
			throws Exception {
		assignable.setAssignee(owner);//分配任务参与者
	}
}

这样就给任务分配了参与者了,将zcl分配给了当前的任务

测试程序

executionService.startProcessInstanceByKey("assignee2");
List<Task> tasks = taskService.findPersonalTasks("zcl");
assertEquals("任务数不是1", 1, tasks.size());
Task task = tasks.get(0);
taskService.completeTask(task.getId());
tasks = taskService.findPersonalTasks("zcl");
assertEquals("没有任务", 0, tasks.size());

 五,通过candidates给任务分配参与者

<task name="review" g="280,151,92,52" candidate-groups="groups">
      <transition name="to wait" to="wait" g="-56,-22"/>
</task>

 在程序中这样调用

String groupId = identityService.createGroup("groups");
identityService.createUser("zcl", "zcl", "z");
identityService.createUser("ch", "ch", "c");
identityService.createMembership("zcl", groupId);
identityService.createMembership("ch", groupId);

 这样就把任务同时分派给了zcl和ch

下面是测试程序:

List<Task> tasks1 = taskService.findPersonalTasks("zcl");
assertEquals("是否相等", 0, tasks1.size());
List<Task> tasks2 = taskService.findPersonalTasks("ch");
assertEquals("是否相等", 0, tasks2.size());
		
tasks1 = taskService.findGroupTasks("zcl");
assertEquals("是否相等", 1, tasks1.size());
tasks2 = taskService.findGroupTasks("ch");
assertEquals("是否相等", 1, tasks2.size());
		
Task task = tasks1.get(0);
taskService.takeTask(task.getId(), "zcl");//组任务被zcl接受了
		
tasks1 = taskService.findGroupTasks("zcl");
assertEquals("是否相等", 0, tasks1.size());
tasks2 = taskService.findGroupTasks("ch");
assertEquals("是否相等", 0, tasks2.size());
		
tasks1 = taskService.findPersonalTasks("zcl");
assertEquals("是否相等", 1, tasks1.size());
tasks2 = taskService.findPersonalTasks("ch");
assertEquals("是否相等", 0, tasks2.size());
		
taskService.completeTask(task.getId());
		
tasks1 = taskService.findPersonalTasks("zcl");
assertEquals("是否相等", 0, tasks1.size());
tasks2 = taskService.findPersonalTasks("ch");
assertEquals("是否相等", 0, tasks2.size());

 六,通过swimlanes来分配

<swimlane candidate-groups="groups" name="sales representative"/>
<start g="135,185,48,48" name="start1">
      <transition g="-58,-22" name="to review" to="review"/>
   </start>
   <task g="247,182,92,52" name="review" swimlane="sales representative">
      <transition name="to check" to="check" g="-25,-25"/>
   </task>

 在程序中这样使用:

identityService.createGroup("groups");
		identityService.createUser("zcl", "zcl", "z");
		identityService.createUser("cn", "cn", "c");
		identityService.createMembership("zcl", "groups", "develop");
		identityService.createMembership("cn", "groups", "develop");
executionSerivce.startProcessInstanceByKey("swimlanes");
		
List<Task> tasks1 = taskService.findPersonalTasks("zcl");
assertEquals("是否相等", 0, tasks1.size());
List<Task> tasks2 = taskService.findPersonalTasks("cn");
assertEquals("是否相等", 0, tasks2.size());
		
tasks1 = taskService.findGroupTasks("zcl");
assertEquals("是否相等", 1, tasks1.size());
tasks2 = taskService.findGroupTasks("cn");
assertEquals("是否相等", 1, tasks2.size());
		
Task task = tasks1.get(0);
taskService.takeTask(task.getId(), "zcl");
		
tasks1 = taskService.findGroupTasks("zcl");
assertEquals("是否相等", 0, tasks1.size());
tasks2 = taskService.findGroupTasks("cn");
assertEquals("是否相等", 0, tasks2.size());
		
tasks1 = taskService.findPersonalTasks("zcl");
assertEquals("是否相等", 1, tasks1.size());
tasks2 = taskService.findPersonalTasks("cn");
assertEquals("是否相等", 0, tasks2.size());
		
taskService.completeTask(task.getId());
		
tasks1 = taskService.findPersonalTasks("zcl");
assertEquals("是否相等", 1, tasks1.size());
tasks2 = taskService.findPersonalTasks("cn");
assertEquals("是否相等", 0, tasks2.size());

 

 

 

 

分享到:
评论

相关推荐

    jBPM4学习总结

    【jBPM4学习总结】 jBPM,全称为Java Business Process Management,是一个开源的、灵活且可扩展的业务流程管理框架,涵盖了业务流程管理、工作流和服务协作等多个领域。自2004年10月加入JBoss组织后,jBPM逐渐成为...

    JBPM4 学习使用总结

    4. **监听器(Listeners)**:允许在流程生命周期的不同阶段添加自定义行为,如开始、结束、任务分配等。 ### 四、JBPM4监控与管理 1. **监控工具(Console)**:JBPM4提供了一个Web管理界面,可以查看流程实例...

    Jbpm4学习文档chm

    **JBPM4学习文档CHM**是一份专为学习和理解JBPM4设计的工作流引擎技术文档,适合那些对工作流框架感兴趣的Java开发者,特别是希望将JBPM与Spring框架集成的人员。JBPM是一个开源的工作流程管理系统,它提供了一整套...

    jbpm4.4学习教程

    jbpm4.4学习教程是一套专为初学者设计的教育资源,旨在帮助用户掌握jbpm这一业务流程管理(Business Process Management)框架的第4.4版本。jbpm是一款开源的Java平台工具,它允许开发者设计、执行和管理业务流程,...

    JBPM4学习笔记

    2. 任务管理:JBPM4提供了任务管理功能,可以分配任务给不同的角色或用户,并处理任务的接收、完成和委托。 四、持久化与恢复 1. JPA集成:JBPM4通过Java Persistence API(JPA)与数据库进行交互,确保流程实例的...

    JBPM3学习笔记

    JBPM3提供任务分配、监控和完成的功能。 3. **实体(Entity)**:包括流程实例(Process Instance)、任务实例(Task Instance)等,用于记录流程运行时的状态。 4. **持久化(Persistence)**:JBPM3使用Hibernate...

    jbpm学习资料,jbpm教程

    它提供了一系列的元素和指令,让开发者能够清晰地定义流程的各个阶段、任务分配、决策逻辑以及流程间的交互。在jBPM-jPDL学习笔记中,你将了解到以下关键知识点: 1. **流程定义**:jPDL通过流程图中的节点(如开始...

    jbpm4web-JBPM4的一个web版本的Demo

    "jbpm4web"是基于JBPM4开发的一个Web版本的示例项目,旨在帮助学习者更直观地理解和应用JBPM4的核心功能。这个Demo涵盖了业务流程的创建、发起、驳回和删除等关键操作,为初学者提供了一个实践平台。 1. **流程设计...

    jbpm4 完整的请假流程

    在这个项目中,可能包含了流程定义、流程实例的创建与管理、任务分配与审批等一系列功能。 首先,jbpm4的核心概念包括: 1. **流程定义(Process Definition)**:这是业务流程的蓝图,用BPMN(Business Process ...

    jbpm4的员工请假例子原码

    2. **任务管理**:jbpm4提供了任务服务,用于处理流程中的任务分配和执行。例如,在员工提交请假申请后,系统会自动创建一个待审批的任务,分配给对应的部门经理。任务可以包含相关数据,如请假天数、原因等。 3. *...

    jbpm4源代码 简单实现公文流转

    7. **Web界面**:"jbpm4web"可能是指jbpm4的Web应用程序部分,用于用户交互,提交任务,查看待办事项等。这部分可能包含前端页面和后端控制器,通过HTTP与工作流引擎通信。 在下载的压缩包中,"jbpm4web"可能包括...

    jBPM4工作流示例jbpmDemo

    在示例中,用户可以看到如何定义和启动工作流实例,以及如何在流程中进行任务分配、流转和结束。工作流的生命周期包括设计、部署、启动、执行和终止等阶段。 **示例**部分提供了实际操作的指导,包括安装配置环境、...

    jBPM 4使用手记

    jBPM 4包含一个内置的任务服务,用于管理流程中的任务分配和完成。任务可以分配给特定的用户或角色,通过工作台或自定义接口进行处理。此外,任务服务提供了监听器和工作流事件处理机制,便于扩展和定制。 ### 6. ...

    jbpm3.1.4经典学习教程

    4. **任务服务**:了解如何分配和完成任务,以及任务的查询和管理工作。 5. **事件处理**:学习如何定义和触发流程中的事件,如信号事件、时间事件等。 6. **流程持久化**:jbpm如何将流程实例的状态持久化到数据库...

    jBPM4工作流应用开发指南.rar

    jBPM4支持多种任务分配策略,如固定分配、动态分配或基于规则的分配。 **6. 整合与API** jBPM4可以通过Java API、JMX管理接口、RESTful服务等方式与其他系统集成。此外,它还支持Spring框架,可以无缝集成到Spring...

    JBPM4整理学习资料

    4. **常用操作**:学习资料中可能涵盖如何创建流程模型、启动流程实例、分配任务、完成任务、查询历史记录等日常操作。这些操作是使用JBPM4进行业务流程管理的基础。 5. **库表结构**:理解JBPM4的数据库表结构对于...

    JBPM4完整示例(包括lib库)

    JBPM4的核心特性之一是采用了Hibernate作为其持久层框架,使得数据管理更加便捷高效,能够与各种数据库无缝集成。 JBPM4的一大亮点是其内置的图形化设计器,允许开发者通过直观的拖拽方式设计工作流程,大大降低了...

    JBPM4学习笔记(全)

    学习如何利用这些服务来实现复杂的业务逻辑,例如动态任务分配、条件分支判断、规则引擎集成等。 5. **监控与调试**:学习使用jbpm提供的报表和监控工具,实时查看流程实例的状态、跟踪执行路径、诊断问题。这对于...

    一个简单的Jbpm4项目源码

    3. **任务分配**: 流程实例中的任务被分配给用户或角色,可以通过查询服务获取待办任务列表。 4. **任务处理**: 用户通过前端界面完成任务,服务类处理任务完成的事件,更新流程实例状态。 5. **流程监控**: 使用...

Global site tag (gtag.js) - Google Analytics