activiti 任务中指派人其实跟候选人并不平等。指派人优先级大于候选人,当有指派人的时候,会忽略掉候选人。只有未指定指派人的时候,候选人才会生效。这是任务查询命令的sql语句分析。可以发现只有
RES.ASSIGNEE_
is null 的时候才会执行后面的候选人查找。
taskCandidateOrAssigned 实际执行的SQL为
select distinct RES.*
from ACT_RU_TASK RES
left join ACT_RU_IDENTITYLINK I
on I.TASK_ID_ = RES.ID_
WHERE (
RES.ASSIGNEE_ = ?
or (
RES.ASSIGNEE_
is null
and (
I.USER_ID_ = ?
or
I.GROUP_ID_
IN (
select g.GROUP_ID_
from ACT_ID_MEMBERSHIP g
where g.USER_ID_ = ?
)
)
)
)
taskCandidateGroup实际执行的SQL为
select distinct RES.*
from ACT_RU_TASK RES
inner join ACT_RU_IDENTITYLINK I
on I.TASK_ID_ = RES.ID_
WHERE RES.ASSIGNEE_
is null
and I.TYPE_ =
'candidate'
and ( I.GROUP_ID_
IN ( ? ) )