您的位置:首页 > 其它

Activiti学习之对用户任务进行操作

2017-07-28 16:44 381 查看
在Activiti中任务是一个重要的概念,业务需求可以分为不同任务类型:

- 用户任务

- 脚本任务

- 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完成");
}
}
}


通过上面的代码就可以完成整个任务的流程

- 启动流程

- 查询任务

- 领取任务

- 完成任务

- 流程结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐