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 ( ? ) )