1. Task之任务分配人(assignee)
Task是一般来处理人机交互的活动,也是工作流中最为复杂的节点,许多元素还有子元素。我们先来看指派分配人。
流程图如下:
流程定义XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="TaskAssignee" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="137,21,48,48">
<transition name="to task1" to="task1" g="-52,-22" />
</start>
<task name="task1" g="117,146,92,52" assignee="#{owner.name}">
<transition name="to state1" to="state1" g="-56,-22" />
</task>
<state name="state1" g="121,280,92,52" />
</process>
通过流程变量#{owner.name}传入指派人的ID,当然owner类必须实现了序列化接口。
Owner类代码如下
package vo;
import java.io.Serializable;
public class AssigneeTaskVO implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试代码如下:
AssigneeTaskVO assigneeTaskVO = new AssigneeTaskVO();
assigneeTaskVO.setName("liuyan");
Map<String, Object> map = new HashMap<String, Object>();
map.put("owner", assigneeTaskVO);
// 开始process流程
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("TaskAssignee", map);
// 流程实例的ID
String pid = processInstance.getId();
System.out.println(pid);// forkjoin.10001
List<Task> taskList = taskService.findPersonalTasks("liuyan");
for (Task task : taskList) {
System.out.println(task.getAssignee());
}
2. Task之任务分配人与分配组
利用Task的candidate-groups和candidate-users可以指定分配组或者分配人。流程图雷同,我们来看xml定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="TaskGroup" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="160,39,48,48">
<transition name="to task1" to="task1" g="-52,-22" />
</start>
<task name="task1" g="136,142,92,52" candidate-groups="tibco">
<transition name="to state1" to="state1" g="-56,-22" />
</task>
<state name="state1" g="134,251,92,52" />
</process>
这里制定了一个组名叫做“tibco”。
下面来看测试代码:
/**
* 使用身份验证接口建立不同的用户、组、组成员
*/
public void test02CreateGroup() {
identityService.createGroup("tibco");
identityService.createGroup("vecinfo");
identityService.createUser("liuyan", "liuyan", "素还真");
identityService.createUser("fcl", "fcl", "风采铃");
identityService.createMembership("liuyan", "tibco");
identityService.createMembership("liuyan", "vecinfo");
identityService.createMembership("fcl", "vecinfo");
}
/**
* 发起流程
*/
public void test03StartTask() {
// 开始process流程
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("TaskGroup");
// 流程实例的ID
String pid = processInstance.getId();
System.out.println(pid);// forkjoin.10001
}
/**
* 获得指定人的任务列表
*/
public void test04GetAssigneeGroupTask() {
List<Task> taskList1 = taskService.findPersonalTasks("liuyan");
for (Task task : taskList1) {
System.out.println(task.getAssignee());
}
List<Task> taskList2 = taskService.findPersonalTasks("fcl");
for (Task task : taskList2) {
System.out.println(task.getAssignee());
}
List<Task> taskList3 = taskService.findGroupTasks("liuyan");
for (Task task : taskList3) {
System.out.println(task.getId());//20002
}
List<Task> taskList4 = taskService.findGroupTasks("fcl");
for (Task task : taskList4) {
System.out.println(task.getId());
}
}
/**
* 争抢获取任务
*/
public void test05ExeTask(){
taskService.takeTask("20002", "liuyan");
}
/**
* 完成任务
*/
public void test06(){
taskService.completeTask("20002");
}
test02CreateGroup()使用身份验证接口创建了组:tibco和vecinfo,创建了用户:liuyan和fcl,并且建立了人员与组织的关系。tibco只有liuyan、vecinfo有liuyan和fcl。test04GetAssigneeGroupTask()执行结果可以看到用户liuyan有task,而fcl没有任何task。如果此时多个人都有task预备任务(把流程中的组名换成vecinfo)的时候,那么就是以争抢的方式来“夺取”该task来执行,谁先抢到,谁就可以执行任务,抢不到的人无法再争抢。
- 大小: 8.1 KB
分享到:
相关推荐
JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——...
JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请...
JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请...
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
jBPM学习总结,涵盖jBPM4的各个基础知识点,及实例解析。
JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM...
JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...
JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z ...
JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM...
JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM...
JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM...
JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_...
JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一)...
JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二)...
jBPM-jPDL学习笔记——流程设计与控制
整理的别人JBPM4 学习资料, 工作流学习文档
JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请...
JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请...
JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请...
JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请...