jbmp取得所有任務

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

 

這樣非常方便可以取得用戶的待處理的任務,對於候選的任務,用戶可以申請執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章