Jbpm4提供两个接口可以获取该用户的待处理任务,
一个是个人的任务:
taskService.findPersonalTasks(userId)
另一个是取得该用户对应的候选任务:
taskService.findGroupTasks(userId)
有时我们需要在一个列表中显示该任务的所有任务,包括他的个人任务,候选任务,这时直接用jbpm4提供的api完成不了该功能要求。
于是可以使用以下方式进行扩展:
/**
*Java代码
* 取得用户的对应的任务列表
* @param userId
* @return
*/
public List<TaskImpl> getTasksByUserId(String userId){
AppUser user=(AppUser)getHibernateTemplate().load(AppUser.class, new Long(userId));
Iterator<AppRole> rolesIt=user.getRoles().iterator();
StringBuffer groupIds=new StringBuffer();
int i=0;
while(rolesIt.hasNext()){
if(i>0)groupIds.append(",");
groupIds.append("'"+rolesIt.next().getRoleId().toString()+"'");
}
/**
* select * from `jbpm4_task` task
left join jbpm4_participation pt on task.`DBID_`=pt.`TASK_`
where task.`ASSIGNEE_`='1' or ( pt.`TYPE_` = 'candidate' and (pt.`USERID_`='1')
or pt.`GROUPID_`in ('1'))
*/
StringBuffer hqlSb=new StringBuffer();
hqlSb.append("select task from org.jbpm.pvm.internal.task.TaskImpl task left join task.participations pt where task.assignee=?");
hqlSb.append(" or (pt.type = 'candidate' and ((pt.userId=?)");
if(user.getRoles().size()>0){
hqlSb.append(" or (pt.groupId in ("+groupIds.toString()+"))");
}
hqlSb.append("))");
hqlSb.append(" order by task.priority desc");
return findByHql(hqlSb.toString(), new Object[]{userId,userId});
}