[jboss-user] [jBPM Users] - Query HistoryService for task assignee and name?

LMarinkov do-not-reply at jboss.com
Mon Sep 14 10:09:07 EDT 2009


I am using jBPM 4.1 and tried to write a unit test that queries the history service using the task assignee and name. 
First i looked at the sources of jBPM and searched for tests that are performing a similar query. Unfortunately the only test related to history task assignee was org.jbpm.test.history.HistoryTaskAssigneeTest shown below and the test didn't use the assignee information to perform the query:

/*
  |  * JBoss, Home of Professional Open Source
  |  * Copyright 2005, JBoss Inc., and individual contributors as indicated
  |  * by the @authors tag. See the copyright.txt in the distribution for a
  |  * full listing of individual contributors.
  |  *
  |  * This is free software; you can redistribute it and/or modify it
  |  * under the terms of the GNU Lesser General Public License as
  |  * published by the Free Software Foundation; either version 2.1 of
  |  * the License, or (at your option) any later version.
  |  *
  |  * This software is distributed in the hope that it will be useful,
  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  |  * Lesser General Public License for more details.
  |  *
  |  * You should have received a copy of the GNU Lesser General Public
  |  * License along with this software; if not, write to the Free
  |  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  |  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  |  */
  | package org.jbpm.test.history;
  | 
  | import org.jbpm.api.Execution;
  | import org.jbpm.api.history.HistoryActivityInstance;
  | import org.jbpm.test.JbpmTestCase;
  | 
  | 
  | /**
  |  * @author Tom Baeyens
  |  */
  | public class HistoryTaskAssigneeTest extends JbpmTestCase {
  | 
  |   public void testHistoryTaskAssignee() {
  |     deployJpdlXmlString(
  |       "<process name='TaskAssignee'>" +
  |       "  <start>" +
  |       "    <transition to='review' />" +
  |       "  </start>" +
  |       "  <task name='review' " +
  |       "        assignee='johndoe'>" +
  |       "    <transition to='wait' />" +
  |       "  </task>" +
  |       "  <state name='wait'/>" +
  |       "</process>"
  |     );
  |     
  |     executionService.startProcessInstanceByKey("TaskAssignee");
  | 
  |     HistoryActivityInstance historyActivityInstance = historyService
  |       .createHistoryActivityInstanceQuery()
  |       .uniqueResult();
  |     
  |   }
  | 
  | }
  | 

The current implementation of the HistoryTaskQuery allows querying using the assignee but not the name of the task. To find out the name for the task i decided to make a HistoryActivityInstanceQuery using the executiondid that will be delivered by the HistoryTaskQuery. To my surprise this didn't work. The HistoryActivityInstanceQuery delivered 3 HistoryActivityInstances instead of 1. So it is not possible to figure out the name of the task that was performed by the assignee. The unit test is shown below:

package com.cg.wfl.jbpm.examples.wfl_examples.history;
  | 
  | import java.util.List;
  | 
  | import org.jbpm.api.Execution;
  | import org.jbpm.api.history.HistoryActivityInstance;
  | import org.jbpm.api.history.HistoryTask;
  | import org.jbpm.test.JbpmTestCase;
  | 
  | public class HistoryTaskAssigneeTest extends JbpmTestCase {
  | 	public void testHistoryTaskAssignee() {
  | 		deployJpdlXmlString(
  | 	    	      "<process name='TaskAssigneeTest'>" +
  | 	    	      "  <start>" +
  | 	    	      "    <transition to='a' />" +
  | 	    	      "  </start>" +
  | 	    	      "  <task name='a' assignee='mary'>" +
  | 	    	      "    <transition name='toB' to ='b' />" +
  | 	    	      "  </task>" +
  | 	    	      "  <task name='b' assignee='alex'>" +
  | 	    	      "    <transition name='toC' to ='c' />" +
  | 	    	      "  </task>" +
  | 	    	      "  <task name='c' assignee='mary'>" +
  | 	    	      "    <transition name='toEnd' to ='end' />" +
  | 	    	      "  </task>" +
  | 	    	      "  <end name='end' />" +
  | 	    	      "</process>"
  | 	    	    );
  | 		Execution execution = executionService.startProcessInstanceByKey("TaskAssigneeTest");
  | 		
  | 		String taskId = taskService.createTaskQuery().uniqueResult().getId();
  | 	    taskService.completeTask(taskId);
  | 	    taskId = taskService.createTaskQuery().uniqueResult().getId();
  | 	    taskService.completeTask(taskId);
  | 	    taskId = taskService.createTaskQuery().uniqueResult().getId();
  | 	    taskService.completeTask(taskId);
  | 
  | 	    assertNull("execution "+execution.getId()+" should not exist", 
  | 	    		executionService.findExecutionById(execution.getId()));
  | 		
  | 	    List<HistoryTask> historyTasks = historyService.createHistoryTaskQuery().
  | 		assignee("mary").list();
  | 		assertEquals(2, historyTasks.size());
  | 
  | 	    historyTasks = historyService.createHistoryTaskQuery().
  | 		assignee("alex").list();
  | 		assertEquals(1, historyTasks.size());
  | 		
  | 		// Try to find out the name of the task for the first task with assignee mary
  | 		String executionId = historyTasks.get(0).getExecutionId();
  | 		List<HistoryActivityInstance> historyActivities = historyService.createHistoryActivityInstanceQuery().
  | 			executionId(executionId).list();
  | 		// The expectation is 1 entry in the list, but the list contains 3 entries
  | 		// It is not possible to link the HistoryTask to the HistoryActivityInstance
  | 		// using the executionId!
  | 		assertEquals(1, historyActivities.size());
  | 	}
  | }
  |  

I found also the following jira issues that references task history details and hope that the problem with the task name will be also considered.

https://jira.jboss.org/jira/browse/JBPM-2442

Any help or comments are welcomed.


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

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



More information about the jboss-user mailing list