在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源码jbpm4源码jbpm4源码
jBPM学习总结,涵盖jBPM4的各个基础知识点,及实例解析。
JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——...
jbpm学习笔记:安装插件、配置环境、发布流程定义、查看流程定义
JBPM4学习经验总结
jbpm任务分配管理.doc,介绍任务是如何分配的
jbpm学习资料,jBPM-jPDL学习笔记,很详细。。。。。。。。。。。jbpm教程
jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版
工作流引擎技术现在越来越火,工作流的框架也越来越多,当然备受好评的jbpm依然是公司选择的首要框架,因为它是java开发,可以和spring做很好的对接,喜欢的朋友可以下载!
5.1表JBPM4_DEPLOYMENT 7 5.2 表JBPM4_DEPLOYPROP 7 5.3 表JBPM4_EXECUTION 8 5.4 表JBPM4_HIST_ACTINST 9 5.5 表JBPM4_HIST_DETAIL 9 5.6 表JBPM4_HIST_PROCINST 10 5.7 表JBPM4_HIST_TASK 11 5.8 表JBPM4_HIST_VAR...
JBPM5入门学习 JBPM5.4中文手册
斯坦福特jbpm入门资料,内容不错,由浅入深,系统讲解了jbpm,是不错的入门资料噢
jbpm4。4中表之间的关系,jbpm4 表关系
jboss jbpm4最新开发包 采用了pvm框架
java源代码分包详解JBPM4 java源代码分包详解JBPM4
jbpm4.4的学习资料 ,有pdf文件和ppt文件,适用于初学者的学习
NULL 博文链接:https://obullxl.iteye.com/blog/696323
jbpm5入门学习资料
JBPM4之基础学习及接口