activiti参考5-任务TASK
一、概要
1,设计TASK的表主要是:ACT_RU_TASK,ACT_HI_TASKINST(见参考-activiti表);
2,任务主要有:人工任务(usertask),服务任务(servicetask)等;
3,候选人/候选组(candidate):可以执行任务的一类人或者多个组,候选人/候选组中都可以去签收任务,一旦某人签收,就成为受理人,其他人就不能再签收受理此任务;usertask流程图中,candidate标示候选;候选人涉及的表ACT_RU_IDENTITYLINK;
4,受理人(assignee):有两种情况,一种是候选人/组中有人签收任务后成为受理人,另外一种是流程图中直接指定受理人,但是可以指定一个动态受理人;受理人涉及的表ACT_RU_TASK;
5,持有人(owner):持有人设置主要是存入历史表中,用于历史任务的查询,涉及的表ACT_HI_TASKINST;
二、任务操作
1,创建TASK任务与设置权限:可以使用代码创建任务,但是实际操作中都是绘制流程图。绘制TASK后,在属性可以设置候选人和受理人,一般都是设置候选人,因为固定受理人不太符合程序变动;
候选人设置了deptleader,该值将部署在表ACT_RU_IDENTITYLINK中,查看xml看见:
1
2
3
|
//设置了候选组 < userTask id = "deptLeaderAudit" name = "部门领导审批" activiti:candidateGroups = "deptLeader" >
</ userTask >
|
完整的XML(无图形位置信息)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
< process id = "leave" name = "请假流程" isExecutable = "true" >
< documentation >请假流程演示</ documentation >
< startEvent id = "startevent1" name = "Start" activiti:initiator = "applyUserId" ></ startEvent >
< userTask id = "deptLeaderAudit" name = "部门领导审批" activiti:candidateGroups = "deptLeader" ></ userTask >
< exclusiveGateway id = "exclusivegateway5" name = "Exclusive Gateway" ></ exclusiveGateway >
< userTask id = "modifyApply" name = "调整申请" activiti:assignee = "${applyUserId}" >
< extensionElements >
< activiti:taskListener event = "complete" delegateExpression = "${afterModifyApplyContentProcessor}" ></ activiti:taskListener >
</ extensionElements >
</ userTask >
< userTask id = "hrAudit" name = "人事审批" activiti:candidateGroups = "hr" ></ userTask >
< exclusiveGateway id = "exclusivegateway6" name = "Exclusive Gateway" ></ exclusiveGateway >
< userTask id = "reportBack" name = "销假" activiti:assignee = "${applyUserId}" >
< extensionElements >
< activiti:taskListener event = "complete" delegateExpression = "${reportBackEndProcessor}" ></ activiti:taskListener >
</ extensionElements >
</ userTask >
< endEvent id = "endevent1" name = "End" ></ endEvent >
< exclusiveGateway id = "exclusivegateway7" name = "Exclusive Gateway" ></ exclusiveGateway >
< sequenceFlow id = "flow2" sourceRef = "startevent1" targetRef = "deptLeaderAudit" ></ sequenceFlow >
< sequenceFlow id = "flow3" sourceRef = "deptLeaderAudit" targetRef = "exclusivegateway5" ></ sequenceFlow >
< sequenceFlow id = "flow4" name = "不同意" sourceRef = "exclusivegateway5" targetRef = "modifyApply" >
< conditionExpression xsi:type = "tFormalExpression" > <![CDATA[${!deptLeaderPass}]]> </ conditionExpression >
</ sequenceFlow >
< sequenceFlow id = "flow5" name = "同意" sourceRef = "exclusivegateway5" targetRef = "hrAudit" >
< conditionExpression xsi:type = "tFormalExpression" > <![CDATA[${deptLeaderPass}]]> </ conditionExpression >
</ sequenceFlow >
< sequenceFlow id = "flow6" sourceRef = "hrAudit" targetRef = "exclusivegateway6" ></ sequenceFlow >
< sequenceFlow id = "flow7" name = "同意" sourceRef = "exclusivegateway6" targetRef = "reportBack" >
< conditionExpression xsi:type = "tFormalExpression" > <![CDATA[${hrPass}]]> </ conditionExpression >
</ sequenceFlow >
< sequenceFlow id = "flow8" sourceRef = "reportBack" targetRef = "endevent1" ></ sequenceFlow >
< sequenceFlow id = "flow9" name = "不同意" sourceRef = "exclusivegateway6" targetRef = "modifyApply" >
< conditionExpression xsi:type = "tFormalExpression" > <![CDATA[${!hrPass}]]> </ conditionExpression >
</ sequenceFlow >
< sequenceFlow id = "flow10" name = "重新申请" sourceRef = "exclusivegateway7" targetRef = "deptLeaderAudit" >
< conditionExpression xsi:type = "tFormalExpression" > <![CDATA[${reApply}]]> </ conditionExpression >
</ sequenceFlow >
< sequenceFlow id = "flow11" sourceRef = "modifyApply" targetRef = "exclusivegateway7" ></ sequenceFlow >
< sequenceFlow id = "flow12" name = "结束流程" sourceRef = "exclusivegateway7" targetRef = "endevent1" >
< conditionExpression xsi:type = "tFormalExpression" > <![CDATA[${!reApply}]]> </ conditionExpression >
</ sequenceFlow >
</ process >
|
2,查询候选任务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//根据候选组ID查询拥有任务 List<Task> tasks = taskService .createTaskQuery()
.taskCandidateGroup(groupA.getId())
.list();
for (Task task : tasks)
{System.out.println(task.getName());} //根据用户ID查询任务 tasks = taskService .createTaskQuery()
.taskCandidateUser(user.getId())
.list();
for (Task task : tasks)
{System.out.println(task.getName());} //调用taskCandidateGroupIn List<String> groupIds = new ArrayList<String>();
groupIds.add(groupA.getId());
groupIds.add(groupB.getId());
tasks = taskService .createTaskQuery()
.taskCandidateGroupIn(groupIds)
.list();
for (Task task : tasks)
{System.out.println(task.getName());}
//查询权限数据 List<IdentityLink> links = taskService .getIdentityLinksForTask(tasks.get( 0 )
.getId());
System.out.println( "关系数据量: " + links.size());}
|
本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/5213430.html,如需转载请自行联系原作者