Activiti学习笔记9 — UserTask共有任务的使用
1、创建流程引擎对象
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
2、发布一个流程
- /**
- * 2、发布一个流程
- */
- @Test
- public void testDeployProcess() {
- RepositoryService repositoryService = processEngine.getRepositoryService();
- DeploymentBuilder builder = repositoryService.createDeployment();
- // 加载发布资源
- builder.name("UserTask共有任务流程测试") // 设置流程显示别名
- .addClasspathResource("userPublicTask.bpmn") // 设置流程规则文件
- .addClasspathResource("userPublicTask.png"); // 设置流程规则的图片
- // 发布流程
- builder.deploy();
- }
3、启动流程、执行任务,并查看状态
- /**
- * 3、启动流程、执行任务,并查看状态
- */
- @Test
- public void testUserTask() {
- //1.获取RuntimeService服务对象的实例
- RuntimeService runtimeService = processEngine.getRuntimeService();
- String processDefinitionKey = "userPublicTask";
- //2.自动执行与Key相对应的流程的最高版本
- ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
- String processInstanceId = processInstance.getId();
- logger.info("processInstanceId:" + processInstance.getId());
- //3.获取TaskService服务对象的实例
- TaskService taskService = processEngine.getTaskService();
- //4.私有任务执行
- //4.1、获取私有任务
- String assignee = "取号";
- List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
- Assert.assertEquals(, tasks.size());
- Task task = tasks.get();
- logger.info("taskName:" + task.getName());
- Assert.assertEquals("取号",task.getName());
- //4.2完成任务
- taskService.complete(task.getId());
- //4.3检查流程状态
- ProcessInstance p1 = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
- Assert.assertNotNull(p1);
- logger.info("取号私有任务流程成功执行!");
- //5、共有任务执行
- //5.1、确认柜员1私有任务列表中没有相关任务
- String assignee1 = "柜员1";
- List<Task> tasks1 = taskService.createTaskQuery().taskAssignee(assignee1).list();
- Assert.assertEquals(, tasks1.size());
- logger.info("柜员1的私有任务数量:" + tasks1.size());
- //5.2、确认柜员2私有任务列表中没有相关任务
- String assignee2 = "柜员2";
- List<Task> tasks2 = taskService.createTaskQuery().taskAssignee(assignee2).list();
- Assert.assertEquals(, tasks2.size());
- logger.info("柜员2的私有任务数量:" + tasks1.size());
- //5.3、获取共有任务列表
- //5.3.1、获取柜员1共有任务列表
- String candidateUser1 = "柜员1";
- List<Task> tasks3 = taskService.createTaskQuery().taskCandidateUser(candidateUser1).orderByTaskCreateTime().desc().list();
- Task task3 = tasks3.get();
- logger.info("柜员1的共有任务数量:" + tasks3.size() + " ID: " + task3.getId() + " Name: " + task3.getName());
- //5.3.2、获取柜员2共有任务列表
- String candidateUser2 = "柜员2";
- List<Task> tasks4 = taskService.createTaskQuery().taskCandidateUser(candidateUser2).orderByTaskCreateTime().desc().list();
- Task task4 = tasks4.get();
- logger.info("柜员2的共有任务数量:" + tasks4.size() + " ID: " + task4.getId() + " Name: " + task4.getName());
- //5.4、柜员2受理任务
- taskService.claim(task4.getId(), "柜员2");
- logger.info("柜员2受理任务!");
- //5.5、查看柜员1和柜员2的私有与共有任务数量
- String assignee3 = "柜员1";
- List<Task> tasks5 = taskService.createTaskQuery().taskAssignee(assignee3).list();
- logger.info("柜员1的私有任务数量:" + tasks5.size());
- String assignee4 = "柜员2";
- List<Task> tasks6 = taskService.createTaskQuery().taskAssignee(assignee4).list();
- logger.info("柜员2的私有任务数量:" + tasks6.size());
- String candidateUser3 = "柜员1";
- List<Task> tasks7 = taskService.createTaskQuery().taskCandidateUser(candidateUser3).orderByTaskCreateTime().desc().list();
- logger.info("柜员1的共有任务数量:" + tasks7.size());
- String candidateUser4 = "柜员2";
- List<Task> tasks8 = taskService.createTaskQuery().taskCandidateUser(candidateUser4).orderByTaskCreateTime().desc().list();
- logger.info("柜员2的共有任务数量:" + tasks8.size());
- //5.6、柜员2完成任务
- taskService.complete(task4.getId());
- //5.6检查结束状态
- ProcessInstance p2 = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
- Assert.assertNull(p2);
- logger.info("UserTask共有任务流程成功执行!");
- }
4、执行结果
[INFO][2015-12-02 10:09:44,768][com.mcs.activiti.test.TestPublicUserTask]processInstanceId:115001
[INFO][2015-12-02 10:09:44,792][com.mcs.activiti.test.TestPublicUserTask]taskName:取号
[INFO][2015-12-02 10:09:45,003][com.mcs.activiti.test.TestPublicUserTask]取号私有任务流程成功执行!
[INFO][2015-12-02 10:09:45,010][com.mcs.activiti.test.TestPublicUserTask]柜员1的私有任务数量:0
[INFO][2015-12-02 10:09:45,016][com.mcs.activiti.test.TestPublicUserTask]柜员2的私有任务数量:0
[INFO][2015-12-02 10:09:45,036][com.mcs.activiti.test.TestPublicUserTask]柜员1的共有任务数量:1 ID: 115007 Name: 取钱
[INFO][2015-12-02 10:09:45,041][com.mcs.activiti.test.TestPublicUserTask]柜员2的共有任务数量:1 ID: 115007 Name: 取钱
[INFO][2015-12-02 10:09:45,117][com.mcs.activiti.test.TestPublicUserTask]柜员2受理任务!
[INFO][2015-12-02 10:09:45,126][com.mcs.activiti.test.TestPublicUserTask]柜员1的私有任务数量:0
[INFO][2015-12-02 10:09:45,138][com.mcs.activiti.test.TestPublicUserTask]柜员2的私有任务数量:1
[INFO][2015-12-02 10:09:45,159][com.mcs.activiti.test.TestPublicUserTask]柜员1的共有任务数量:0
[INFO][2015-12-02 10:09:45,162][com.mcs.activiti.test.TestPublicUserTask]柜员2的共有任务数量:0
[INFO][2015-12-02 10:09:45,256][com.mcs.activiti.test.TestPublicUserTask]UserTask共有任务流程成功执行!
5、共有流程定义 userPublicTask.bpmn
- <?xml version="1.0" encoding="UTF-8"?>
- <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
- <process id="userPublicTask" name="共有任务" isExecutable="true">
- <startEvent id="startevent1" name="Start"></startEvent>
- <userTask id="取号" name="取号" activiti:assignee="取号"></userTask>
- <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="取号"></sequenceFlow>
- <userTask id="取钱" name="取钱" activiti:candidateUsers="柜员1,柜员2"></userTask>
- <sequenceFlow id="flow3" sourceRef="取号" targetRef="取钱"></sequenceFlow>
- <endEvent id="endevent2" name="End"></endEvent>
- <sequenceFlow id="flow4" sourceRef="取钱" targetRef="endevent2"></sequenceFlow>
- </process>
- <bpmndi:BPMNDiagram id="BPMNDiagram_userPublicTask">
- <bpmndi:BPMNPlane bpmnElement="userPublicTask" id="BPMNPlane_userPublicTask">
- <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
- <omgdc:Bounds height="35.0" width="35.0" x="335.0" y="40.0"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape bpmnElement="取号" id="BPMNShape_取号">
- <omgdc:Bounds height="55.0" width="105.0" x="300.0" y="110.0"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape bpmnElement="取钱" id="BPMNShape_取钱">
- <omgdc:Bounds height="55.0" width="105.0" x="300.0" y="210.0"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape bpmnElement="endevent2" id="BPMNShape_endevent2">
- <omgdc:Bounds height="35.0" width="35.0" x="335.0" y="310.0"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
- <omgdi:waypoint x="352.0" y="75.0"></omgdi:waypoint>
- <omgdi:waypoint x="352.0" y="110.0"></omgdi:waypoint>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
- <omgdi:waypoint x="352.0" y="165.0"></omgdi:waypoint>
- <omgdi:waypoint x="352.0" y="210.0"></omgdi:waypoint>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
- <omgdi:waypoint x="352.0" y="265.0"></omgdi:waypoint>
- <omgdi:waypoint x="352.0" y="310.0"></omgdi:waypoint>
- </bpmndi:BPMNEdge>
- </bpmndi:BPMNPlane>
- </bpmndi:BPMNDiagram>
- </definitions>
Activiti学习笔记9 — UserTask共有任务的使用的更多相关文章
- Activiti学习笔记8 — UserTask私有任务的使用
每一个UserTask都会在Execution表和Task表中各产生一条记录 一.创建流程引擎对象 /** * 1.创建流程引擎对象 */ private ProcessEngine processE ...
- Activiti学习笔记目录
1.Activiti学习笔记1 — 下载与开发环境的配置: 2.Activiti学习笔记2 — HelloWorld: 3.Activiti学习笔记3 — 流程定义: 4.Activiti学习笔记4 ...
- activiti学习笔记一
activiti学习笔记 在讲activiti之前我们必须先了解一下什么是工作流,什么是工作流引擎. 在我们的日常工作中,我们会碰到很多流程化的东西,什么是流程化呢,其实通俗来讲就是有一系列固定的步骤 ...
- Activiti 学习笔记记录(2016-8-31)
上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件
- Activiti 学习笔记记录(二)
上一篇:Activiti 学习笔记记录 导读:对于工作流引擎的使用,我们都知道,需要一个业务事件,比如请假,它会去走一个流程(提交申请->领导审批---(批,不批)---->结束),Act ...
- activiti学习笔记二
上一篇文章大概讲了下什么是流程引擎,为什么我们要用流程引擎,他的基本原理是啥,以及怎么进行基本的使用,这篇文章我们再讲下其他的一些使用. 删除流程部署 package activiti02; impo ...
- Activiti 学习笔记(2016-8-30)
前言 不管学习什么,都必须对知识体系中专有的名词或者特定的语言组织方式 有所了解. 本文仅记录学习过程中的笔记,参考意义因人而定,不保证所言全部正确. 学习方式,百度传课的视频<权威Activi ...
- Activiti 学习笔记记录
官方在线用户手册(英文版):http://activiti.org/userguide/index.html 中文用户手册:http://www.mossle.com/docs/activiti/in ...
- Activiti学习笔记10 — 动态任务分配
动态任务分配使用的两种方式 一.通过特殊表达式,来获取任务信息 ,在流程 UserTask节点上设置 ${流程变量的Key} 1.流程定义 <?xml version="1.0&quo ...
随机推荐
- Serializable读写类操作
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...
- new delete
malloc/free是标准的库函数,而new/delete是操作符 匹配使用原则:malloc(calloc/realloc)和free 以及new/new[] 和delete/delete[]; ...
- Java控制台
Console类的目的是使Java程序和控制台之间的交互更容易.Console类是java.io包中的一个实用程序类,用于访问系统控制台.控制台不能保证在所有机器上的Java程序中可访问. 例如,如果 ...
- 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷
通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEclipse中的window->show View->ot ...
- 看官方文档学习springcloud搭建
很多java的朋友学习新知识时候去百度,看了之后一知半解,不知道怎么操作,不知道到底什么什么东西,那么作为java码农到底该怎么学习额 一 百度是对还是错呢? 百度是一个万能的工具,当然是对也是错的 ...
- 创建UI的线程才能访问UI,那么怎样才算访问UI呢
只有创建UI元素的线程(主线程又叫UI线程)才能访问UI元素.在UI线程中工作,不会有这个问题. 在后台线程中,如果直接访问UI元素,会抛出 “调用线程无法访问此对象,因为另一个线程拥有该对象” 异常 ...
- 使用jQuery的datetimepicker插件
因为后台系统要使用年月日时分的设置,又因为使用的Bootstrap框架只有datepicker和timepicker控件.所以在jQuery库中找到轻量级的datetimepicker插件,很好地解决 ...
- Dubbo中有哪些角色?
registry 注册中心. 是用于发布和订阅服务的一个平台.用于替代SOA结构体系框架中的ESB服务总线的. 发布 开发服务端代码完毕后, 将服务信息发布出去. 实现一个服务的公开. 订阅 客户端程 ...
- php array remove empty values
print_r(array_filter($linksArray)); 參考 Remove empty array elements Remove Empty Array Elements In PH ...
- thinkphp sql解析缓存
除了查询缓存之外,ThinkPHP还支持SQL解析缓存,因为ThinkPHP的ORM机制,所有的SQL都是动态生成的,然后由数据库驱动执行. 直线电机厂家 所以如果你的应用有大量的SQL查询需求,那么 ...