JBPM4 No unnamed transitions were found for the task 'XXXX'. 异常

转自:http://hi.baidu.com/javazhangyong/blog/item/900fcaddb308f90048540312.html


JBPM4执行taskService.completeTask(taskId,map)或taskService.completeTask(taskId) 操作时,出现如下异常:

 

No unnamed transitions were found for the task 'XXXX'

 

——————————————————————————————————————————————

 

分析原因:(见:用户手册:taskservice

 

 

如果一个任务拥有一个没用名称的外向转移:

taskService.getOutcomes() 返回包含一个null值集合,。taskService.completeTask(taskId) 会使用这个外向转移。taskService.completeTask(taskId, null) 会使用这个外向转移。taskService.completeTask(taskId, "anyvalue") 会抛出一个异常。

 

如果一个任务拥有一个有名字的外向转移:

gtaskService.getOutcomes() 返回包含这个转移名称的集合。taskService.completeTask(taskId) 会使用这个单独的外向转移。taskService.completeTask(taskId, null) 会抛出一个异常(因为这里没有无名称的转移)。taskService.completeTask(taskId, "anyvalue") 会抛出一个异常。taskService.completeTask(taskId, "myName") 会根据给定的名称使用转移。

 

如果一个任务拥有多个外向转移,其中一个转移没有名称,其他转移都有名称:

taskService.getOutcomes() 返回包含一个null值和其他转移名称的集合。taskService.completeTask(taskId) 会使用没有名字的转移。taskService.completeTask(taskId, null) 会使用没有名字的转移。taskService.completeTask(taskId, "anyvalue") 会抛出异常。taskService.completeTask(taskId, "myName") 会使用名字为'myName'的转移。

 

如果一个任务拥有多个外向转移,每个转移都拥有唯一的名字:

taskService.getOutcomes() 返回包含所有转移名称的集合。taskService.completeTask(taskId) 会抛出异常,因为这里没有无名称的转移。taskService.completeTask(taskId, null) 会抛出异常,因为这里没有无名称的转移。taskService.completeTask(taskId, "anyvalue") 会抛出异常。taskService.completeTask(taskId, "myName") 会使用名字为'myName'的转移。


————————————————————————————————————————

解决方案:

根据以上分析,可得到解决方案:

1、只拥有一个外向转移时(对应上文所述1、2情况)

Map map = new HashMap();
map.put("",……)//各种参数
taskService.setVariables(taskId,map);
taskService.completeTask(taskId);

3、拥有多个外向转移时(上文3、4种情况)
Map map = new HashMap();
map.put("",……)//各种参数
taskService.setVariables(taskId,map);

//如想转移至有名称的外向转移:
taskService.completeTask(taskId,"外向转移名称");

//如想转移至无名称的外向转移:
taskService.completeTask(taskId);

你可能感兴趣的:(jbpm,HashMap,null,任务)