浏览 2688 次
锁定老帖子 主题:扩展JBPM取得我的任务
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-30
Jbpm4提供两个接口可以获取该用户的待处理任务, 一个是个人的任务: taskService.findPersonalTasks(userId)
另一个是取得该用户对应的候选任务: taskService.findGroupTasks(userId)
有时我们需要在一个列表中显示该任务的所有任务,包括他的个人任务,候选任务,这时直接用jbpm4提供的api完成不了该功能要求。
于是可以使用以下方式进行扩展:
/** * 取得用户的对应的任务列表 * @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}); }
这样非常方便可以取得用户的待处理的任务,对于候选的任务,用户可以申请执行。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |