Activiti学习之对用户任务进行操作
2017-07-28 16:44
381 查看
在Activiti中任务是一个重要的概念,业务需求可以分为不同任务类型:
- 用户任务
- 脚本任务
- WebService任务
- 邮件任务
- Mule任务
- ·····
下面来介绍一下用户任务的使用方法。
XML代码如下:
通过上面的代码就可以完成整个任务的流程
- 启动流程
- 查询任务
- 领取任务
- 完成任务
- 流程结束
- 用户任务
- 脚本任务
- WebService任务
- 邮件任务
- Mule任务
- ·····
下面来介绍一下用户任务的使用方法。
1、创建用户和用户组
创建用户信息和组信息及其关联信息请参照上一篇教程:Activiti学习之用户与组2、新建流程图
通过Eclipse的activiti插件绘制的流程图,增加一个用户任务,并指定任务的候选组为group1,该用户组下的用户都可以领取并完成该任务:XML代码如下:
<?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: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="userTaskProcess" name="user task process" isExecutable="true"> <startEvent id="startevent1" name="Start"></startEvent> <userTask id="usertask1" name="User Task" activiti:candidateGroups="group1"></userTask> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess"> <bpmndi:BPMNPlane bpmnElement="userTaskProcess" id="BPMNPlane_myProcess"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="150.0" y="200.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1"> <omgdc:Bounds height="55.0" width="105.0" x="230.0" y="190.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="380.0" y="200.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="185.0" y="217.0"></omgdi:waypoint> <omgdi:waypoint x="230.0" y="217.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> <omgdi:waypoint x="335.0" y="217.0"></omgdi:waypoint> <omgdi:waypoint x="380.0" y="217.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
3、部署流程
将流程图文件放到项目当中的resources下的processes文件夹,运行程序4、编写代码
利用spring boot 的单元测试来对该流程进行测试@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SpringBootActivitiApplication.class) public class UserTaskTest { @Autowired RuntimeService runtimeService; @Autowired TaskService taskService; @Autowired IdentityService identityService; /** * 启动流程 */ @Test public void testStartProcess() { runtimeService.startProcessInstanceByKey("userTaskProcess"); } /** * 根据组查询任务 */ @Test public void testQueryTaskByGroup() { List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("group1").list(); if (null != tasks && tasks.size() > 0) { System.out.println(tasks.get(0).getName()); } else { System.out.println("未查询到任务信息"); } } /** * 根据用户查询任务 */ @Test public void testQueryTaskByAssignee() { List<Task> tasks = taskService.createTaskQuery().taskAssignee("user1").list(); if (null != tasks && tasks.size() > 0) { System.out.println(tasks.get(0).getName()); } else { System.out.println("未查询到任务信息"); } } /** * 领取任务 */ @Test public void testClaimTask() { //根据用户ID查询任务信息 List<Task> tasks = taskService.createTaskQuery().taskCandidateOrAssigned("user1").list(); if (null != tasks && tasks.size() > 0) { Task task = tasks.get(0); //领取任务 taskService.claim(task.getId(), "user1"); } else { System.out.println("未查询到任务信息"); } } /** * 完成任务 */ @Test public void testCompleteTask() { //查询任务执行人为user1的任务 List<Task> tasks = taskService.createTaskQuery().taskAssignee("user1").list(); if (null != tasks && tasks.size() > 0) { Task task = tasks.get(0); System.out.println(task.getName()); taskService.complete(task.getId()); System.out.println("任务:" + task.getName() + "已经被用户user1完成"); } } }
通过上面的代码就可以完成整个任务的流程
- 启动流程
- 查询任务
- 领取任务
- 完成任务
- 流程结束
相关文章推荐
- 微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
- [EntLib]微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
- lr学习笔记--1个用户2个投标操作;2个用户分别进行一次操作设置
- 工作流引擎Activiti学习---使用流程变量进行个人任务分配
- lr学习笔记--controller进行并发操作,多用户单循环、多用户多循环
- 工作流引擎Activiti学习---使用流程变量进行个人任务分配
- web开发之JS学习(三)与用户进行交互的操作
- Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
- asp.net学习总结——ADO.net(对Sql Server进行操作的数据访问类)
- linux学习之(四)-用户、组的操作,给文件文件夹设置组,更改目录权限、文件权限
- Struts学习总结(七)---使用Struts2实现用户信息的CRUD操作(一:查询操作)
- PHP―使用MYSQL来 进入用户管理中心进行更多的操作
- Activiti学习笔记六 流程实例 任务 执行对象控制流程执行
- Spark中组件Mllib的学习11之使用ALS对movieLens中一百万条(1M)数据集进行训练,并对输入的新用户数据进行电影推荐
- Oracle学习操作(7)用户、权限、角色
- git学习--GitHub上如何进行PR(Pull Request)操作
- PHP学习笔记(15)PDO数据库操作+AJAX无刷新技术删除用户
- 演示基于用户进行流复制案例-可以同步用户的DDL操作
- 就C语言的指针、链表的原理和各类操作撰写一篇技术博客,说说自己学习C语言指针和链表的体会,并将学生信息管理系统进行修改,使能完成其他的功能,并撰写体会,附加源代码。
- HTML提交表单用户选择的头像如何利用<select>标签提交到PHP并连接数据库进行存读操作