`

JBPM4--No unnamed transitions were found for the task

    博客分类:
  • JBPM
 
阅读更多
//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); 

分享到:
评论

相关推荐

    jBPM4-app-forth4 源码实例 jbpm4

    jBPM4-app-forth4 是一个基于jBPM4框架的应用程序实例,它提供了深入理解jBPM4工作流引擎及其应用开发的宝贵资源。jBPM4是一款开源的业务流程管理(Business Process Management)和工作流系统,主要用于设计、执行...

    jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)

    jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载

    jbpm-human-task-5.1.0.Final.jar

    jbpm-human-task-5.1.0.Final.jar jbpm5

    jbpm-human-task-5.1.0.Final-sources.jar

    jbpm-human-task-5.1.0.Final-sources.jar jbpm5 源码

    jbpm-starters-kit-3.1.2.part2.rar

    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插件,共两卷

    jbpm4.4-demo

    3. **jbpm核心库**:包括jbpm-runtime、jbpm-persistence、jbpm-human-task等,这些都是jbpm框架的核心依赖,负责流程的执行和管理。 4. **示例应用**:可能是一个简单的Web应用程序,使用Spring或其他框架集成jbpm...

    jbpm-jpdl-designer-site-3.1.7.zip

    jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip

    jbpm-jpdl-suite-3.2.3的安装配置

    4. **jbpm-console.war**:这是一个基于JSF的Web控制台,用于监控jPDL平台的运行情况,包括数据库监控、流程定义管理和流程实例执行。此外,它还包含一个入门演示,帮助新手快速熟悉jPDL。 **jbpm-jpdl-suite-3.2.3...

    jeecg-jbpm-framework 20130202.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安装配置.doc

    4. **jbpm-jpdl-suite-3.2.3部署**: - 在MySQL中执行修改后的jbpm.jpdl.mysql.sql脚本,初始化jbpm所需的表结构。 - 配置jbpm的数据库连接信息,通常是在jbpm的配置文件中(如jbpm-config.xml或相关的JNDI配置)...

    jbpm-jpdl-suite-3.2.3.zip

    jbpm-jpdl-suite-3.2.3.zip工作流 设计器

    JBPM-----PPT

    - **jbpm-console-ng**:新一代的Web管理界面,提供更丰富的功能和更好的用户体验。 - **API与服务**:讲解如何通过RESTful API和JMS消息服务与JBPM交互。 - **集成工具**:包括Maven插件、Eclipse插件等,便于...

    jbpm-jpdl-suite-3.2.GA.zip-6

    jbpm-jpdl-suite-3.2.GA.zip

    jbpm-jpdl-3.2.3.zip

    jbpm-jpdl-3.2.3.zip 是一个包含开源工作流引擎jbpm的版本3.2.3的压缩包。jbpm(Java Business Process Management)是一个强大的业务流程管理系统,它提供了完整的业务流程建模、执行和管理能力,特别适合于需要...

    spring-modules-jbpm31-0.6.jar

    spring-modules-jbpm31-0.6.jar,spring整合jbpm的jar包

    jbpm-jpdl-designer-3.1.7.zip

    【jbpm-jpdl-designer-3.1.7.zip】是一个包含JBPM(Java Business Process Management)工作流设计工具的Eclipse插件版本3.1.7的压缩包。这个插件允许开发者在Eclipse集成开发环境中创建、编辑和管理JPDL(JBPML,...

    jbpm-flow-builder-5.1.0.Final.jar

    jbpm-flow-builder-5.1.0.Final.jar jbpm5

    jbpm-2.0-beta1.zip_java 工作流引擎_jbpm_jbpm-demo_工作流_工作流引擎

    jbpm-2.0-beta1是该系统的早期版本,其核心功能包括工作流引擎、流程建模工具以及一系列示例项目,如jbpm-demo,用于帮助用户更好地理解和应用jbpm。 工作流引擎是jbpm的核心组件,它负责解析和执行工作流定义...

Global site tag (gtag.js) - Google Analytics