//taskService.completeTask(taskId,map);//报错解决方案
//解决方案如下:
taskService.setVariables(taskId,map);
taskService.completeTask(taskId);
一:出错场景
BPM4执行taskService.completeTask(taskId,map)或taskService.completeTask(taskId) 操作时,出现如下异常:
Console代码
2011-3-1 14:57:00 org.jbpm.internal.log.Jdk14Log info
信息: exception while executing command org.jbpm.pvm.internal.cmd.CompositeCmd@19d5db9
org.jbpm.api.JbpmException: No transition named '申请' was found.
2011-3-1 14:57:00 org.jbpm.internal.log.Jdk14Log info
信息: exception while executing command org.jbpm.pvm.internal.cmd.CompositeCmd@19d5db9
org.jbpm.api.JbpmException: No transition named '申请' was found.
Console代码
No unnamed transitions were found for the task '申请'
No unnamed transitions were found for the task '申请'
这都是没有处理好Jbpm转移引起的问题。
Console代码
No transition named '申请' was found
No transition named '申请' was found是由于一个名为‘申请’的流入转移(或者流出转移)没有定义。
仔细查看xml,是不是写错了。
Xml代码
<transition g="-5,-17" name="申请" to="部门领导审批"/>
<transition g="-5,-17" name="申请" to="部门领导审批"/>
Console代码
No unnamed transitions were found for the task '申请'
No unnamed transitions were found for the task '申请'
是连接'申请'的task任务没有命名的转移被找到
二:问题解决
可以看到核稿,驳回等就是transtion,属于外向转移。
使用taskService.completeTask(taskId)
就会报错。
使用taskService.completeTask(taskId, "error_value")
也会报错。
如果流程走到办公核稿,
Java代码
taskService.completeTask(taskId, "会签") ;
//or
taskService.completeTask(taskId, "驳回") ;
taskService.completeTask(taskId, "会签") ;
//or
taskService.completeTask(taskId, "驳回") ;
这才是正确的!
了解Transtion
那么什么Transtion呢?!
Transtion:转移负责将各个活动定义连接起来,组成流程定义。
转移可分为流入转移和流出转移
三:原理分析
如果一个任务拥有一个没用名称的外向转移:
Java代码
//返回包含一个null值集合,。
taskService.getOutcomes()
//会使用这个外向转移。
taskService.completeTask(taskId)
//会使用这个外向转移。
taskService.completeTask(taskId, null)
//会抛出一个异常。
taskService.completeTask(taskId, "anyvalue")
//返回包含一个null值集合,。
taskService.getOutcomes()
//会使用这个外向转移。
taskService.completeTask(taskId)
//会使用这个外向转移。
taskService.completeTask(taskId, null)
//会抛出一个异常。
taskService.completeTask(taskId, "anyvalue")
如果一个任务拥有一个有名字的外向转移:
Java代码
//返回包含这个转移名称的集合。
taskService.getOutcomes()
// 会使用这个单独的外向转移。
taskService.completeTask(taskId)
//会抛出一个异常(因为这里没有无名称的转移)。
taskService.completeTask(taskId, null)
//会抛出一个异常。
taskService.completeTask(taskId, "anyvalue")
// 会根据给定的名称使用转移。
taskService.completeTask(taskId, "myName")
//返回包含这个转移名称的集合。
taskService.getOutcomes()
// 会使用这个单独的外向转移。
taskService.completeTask(taskId)
//会抛出一个异常(因为这里没有无名称的转移)。
taskService.completeTask(taskId, null)
//会抛出一个异常。
taskService.completeTask(taskId, "anyvalue")
// 会根据给定的名称使用转移。
taskService.completeTask(taskId, "myName")
如果一个任务拥有多个外向转移,其中一个转移没有名称,其他转移都有名称:
Java代码
//返回包含一个null值和其他转移名称的集合。
taskService.getOutcomes()
//会使用没有名字的转移。
taskService.completeTask(taskId)
//会使用没有名字的转移。
taskService.completeTask(taskId, null)
//会抛出异常。
taskService.completeTask(taskId, "anyvalue")
//会使用名字为'myName'的转移。
taskService.completeTask(taskId, "myName")
//返回包含一个null值和其他转移名称的集合。
taskService.getOutcomes()
//会使用没有名字的转移。
taskService.completeTask(taskId)
//会使用没有名字的转移。
taskService.completeTask(taskId, null)
//会抛出异常。
taskService.completeTask(taskId, "anyvalue")
//会使用名字为'myName'的转移。
taskService.completeTask(taskId, "myName")
如果一个任务拥有多个外向转移,每个转移都拥有唯一的名字:
Java代码
//返回包含所有转移名称的集合
taskService.getOutcomes()
//会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId)
//会抛出异常,因为这里没有无名称的转移
taskService.completeTask(taskId, null)
//会抛出异常
taskService.completeTask(taskId, "anyvalue")
//会使用名字为'myName'的转移
taskService.completeTask(taskId, "myName")
//返回包含所有转移名称的集合
taskService.getOutcomes()
//会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId)
//会抛出异常,因为这里没有无名称的转移
taskService.completeTask(taskId, null)
//会抛出异常
taskService.completeTask(taskId, "anyvalue")
//会使用名字为'myName'的转移
taskService.completeTask(taskId, "myName")
解决方案:
根据以上分析,可得到解决方案:
1、只拥有一个外向转移时(对应上文所述1、2情况):
Java代码
Map map = new HashMap();map.put("",……)
//各种参数
taskService.setVariables(taskId,map);
taskService.completeTask(taskId);
Map map = new HashMap();map.put("",……)
//各种参数
taskService.setVariables(taskId,map);
taskService.completeTask(taskId);
3、拥有多个外向转移时(上文3、4种情况):
Java代码
Map map = new HashMap();map.put("",……)
//各种参数
taskService.setVariables(taskId,map);
//如想转移至有名称的外向转移:
taskService.completeTask(taskId,"外向转移名称");
//如想转移至无名称的外向转移:
taskService.completeTask(taskId);
Map map = new HashMap();map.put("",……)
//各种参数
taskService.setVariables(taskId,map);
//如想转移至有名称的外向转移:
taskService.completeTask(taskId,"外向转移名称");
//如想转移至无名称的外向转移:
taskService.completeTask(taskId);
分享到:
相关推荐
JBPM-----PPT 工作流JBPM完整PPT文件。帮你更快速上手。
jbpm-eclipse插件,这个插件随jbpm4.4 一起发布,位于 jbpm-4.4/install/src/gpd 目录下,由于许多人找不到这个包,所有传上来,赚点积分。
jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载
jbpm-human-task-5.1.0.Final.jar jbpm5
jbpm-human-task-5.1.0.Final-sources.jar jbpm5 源码
jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,共两卷
jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip
jeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202....
jbpm-jpdl-suite-3.2.3.zip工作流 设计器
jbpm-jpdl-suite-3.2.GA.zip
spring-modules-jbpm31-0.6.jar,spring整合jbpm的jar包
jbpm-flow-builder-5.1.0.Final.jar jbpm5
jbpm-installer-3.2.6.GA.jar
jBPM2-流程图与JBPM API.ppt jBPM2-流程图与JBPM API.ppt
jbpm-jpdl-designer资源
jbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocs
工作流jbpm---学习文档+简单实例项目,里面有两个文档说明,一个ssh+jbpm项目实例
jbpm-jpdl-suite-3.2.GA.zip
这个是jbpm-jpdl-3.2.3.zip的server部分,有60多兆, 只要将"jbpm-jpdl-3.2.3(没有server部分).rar"和这个合在一起就是整个的jbpm-jpdl-3.2.3.zip "jbpm-jpdl-3.2.3(没有server部分).rar"在我的另外一个上传资源里面