[jboss-user] [jBPM Users] - Re: Query on remaining task

freak182 do-not-reply at jboss.com
Wed Aug 26 05:49:44 EDT 2009


Hello,

Just wanted to share how I accomplished this query. although it is not, let say hibernate way or jbpm way, but it work.


  | 
  | @SuppressWarnings("unchecked")
  | 	public List<Task> findNextTasksByProcessInstance(final ProcessInstance process)
  | 	{
  | 		try {
  | 			return (List<Task>) jbpmTemplate.execute(new JbpmCallback() {
  | 
  | 				public Object doInJbpm(JbpmContext context)
  | 						throws JbpmException {
  | 					
  | 					final long processDefId = process.getProcessDefinition().getId();
  | 					
  | 					final GraphSession sess = context.getGraphSession();
  | 					final ProcessDefinition def = sess.getProcessDefinition(processDefId);
  | 					final Map<String, Task> task = def.getTaskMgmtDefinition().getTasks();
  | 					final Set<String> taskSet = task.keySet();
  | 					
  | 					final Session session = context.getSession();
  | 					final Query query = session.getNamedQuery("findNextTasksByProcessInstance");
  | 					query.setEntity("processInstance", process);
  | 					final List<String> taskInstance = query.list();
  | 					
  | 					return JbpmEngineUtils.getNextTasks(taskSet, taskInstance, task);
  | 				}
  | 			});
  | 		} catch (Exception e) {
  | 			throw new CCTIException("No task instance get", e);
  | 		}
  | 	}
  | 

then subtract the activeTask from possibletask:


  | public static List<String> getNextTasks(Set<String> possibleTask,List<String> completedTask,Map<String,Task> task)
  | 	{
  | 		final List<String> nextTasks = new ArrayList<String>();
  | 		
  | 		final Set<String> tmpPossibleTask = new HashSet<String>(possibleTask);
  | 		final List<String> tmpActiveTask = new ArrayList<String>(completedTask);
  | 		final Map<String, Task> mapTask = new HashMap<String, Task>(task);
  | 		
  | 		for(String s : tmpActiveTask)
  | 		{
  | 			if ( tmpPossibleTask.contains(s) )
  | 			{
  | 				tmpPossibleTask.remove(s);
  | 			}
  | 		}
  | 		Iterator<String> ite = tmpPossibleTask.iterator();
  | 		while (ite.hasNext()) {
  | 			final String string =  ite.next();
  | 			final Task taskLeft = mapTask.get(string);
  | 			nextTasks.add(taskLeft.getDescription());
  | 		}
  | 		return nextTasks;
  | 	}
  | 

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4251736#4251736

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4251736



More information about the jboss-user mailing list