扩展JBPM取得我的任务

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

 

 

你可能感兴趣的:(jbpm)