org.jbpm.JbpmException: task node does not have leaving transition 'reject'
原因:没有找到名字是'reject'的transition.但是processdefinition.xml文件里面确实有这个transition的,
<transition name="reject" to="d1">
<action class="com.xxx.xxx.xxx" />
</transition>
为什么呢?
因为我再第一次编写processdefinition.xml的时候我的这个transition是中文的name="拒绝",并且我已经吧这个工作流发布到数据库中了,因为我查数据库表:jbpm_transition 发现里面的name是以前的"拒绝",难怪会提示找不到transition 'reject',因为数据库中根本就没有name=reject的transition
所以我就用新的processdefinition.xml重新发布了一次工作流到数据库中.再次运行,还是报同样的错.......
这次我再看代码,发现处理任务的代码:
List<TaskInstance> list = context.getTaskList(actorId);
for(TaskInstance ti : list ){
if(pas){
ti.end("approve");
}else{
ti.end("reject");
}
}
我觉得问题再List<TaskInstance> list = context.getTaskList(actorId);
这一句,我查数据库,发现再jbpm_taskinstance 表中分配给actorId的,并且isopen='1'的有4条,这是因为我上次报错的程序运行了4次,每次流程都停留再这个节点没有走下去.因为有多条,所以找出来的第一条对应的任务就有可能没有对应的name='reject'的transition,这里有是循环,每条记录都会来一次ti.end("approve")或者ti.end("reject"); 所以会报原来一样的错.把jbpm_taskinstance 表中,所有分配给我要找的actorId记录的isopen都改为'0'.
再次运行,正确,问题解决.
PS:我也是第一次运行JBPM发现这个错,再网上找答案,只看到问题,没看到答案,所以把自己的解决方法写出来.希望对其它人有帮助.