扩展JBPM取得我的任务

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});
		
	}

 

这样非常方便可以取得用户的待处理的任务,对于候选的任务,用户可以申请执行。

你可能感兴趣的:(jbpm)