import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;
import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
public class Test {
ProcessEngine processEngine;
public static void main(String[] args) {
Test t=new Test();
t.process();
}
public void process() {
ProcessEngine processEngine=Configuration.getProcessEngine();
RepositoryService repositoryService=processEngine.getRepositoryService();
ExecutionService executionService =processEngine.getExecutionService();
TaskService taskService=processEngine.getTaskService();
//部署流程
String pid=repositoryService.createDeployment().addResourceFromClasspath("hellworld.jpdl.xml").deploy();
//部署zip文件流程
//ZipInputStream zis=new ZipInputStream(this.getClass().getResourceAsStream("/aa.zip"));
//repositoryService.createDeployment().addResourcesFromZipInputStream(zis).deploy();
//创建实例
Map map=new HashMap();
map.put("user", "sunbin");
ProcessInstance processInstance=executionService.startProcessInstanceByKey("hellworld",map);
//获取任务
List<Task> taskList=taskService.findPersonalTasks("sunbin");
for(Task task :taskList){
System.out.println(task.getActivityName());
System.out.println(task.getId());
System.out.println(task.getAssignee());
//接收任务
taskService.takeTask(task.getId(),"sunbin");
//提交任务
taskService.completeTask(task.getId(),"to 试测3");
Set<String> ActivityNames=processInstance.findActiveActivityNames();
System.out.println(ActivityNames);
//更新后看到最新id
processInstance=executionService.findProcessInstanceById(processInstance.getId());
System.out.println(processInstance.isActive("试测3"));
}
}
}
JBPM4执行taskService.completeTask(taskId,map)或taskService.completeTask(taskId) 操作时,出现异常:
No unnamed transitions were found for the task 'XXXX'....................
-------------------------------------------------------------------------------------------------------------------------------------------------------------
考虑再三还是把参考中的原因分析写上吧,这样会更完整些,方便查看,省的各种查找了:
原理分析:
1.如果一个任务拥有一个没用名称的外向转移:
//返回包含一个null值集合,。 taskService.getOutcomes() //会使用这个外向转移。 taskService.completeTask(taskId) //会使用这个外向转移。 taskService.completeTask(taskId, null) //会抛出一个异常。 taskService.completeTask(taskId, "anyvalue")
2.如果一个任务拥有一个有名字的外向转移:
//返回包含这个转移名称的集合。 taskService.getOutcomes() // 会使用这个单独的外向转移。 taskService.completeTask(taskId) //会抛出一个异常(因为这里没有无名称的转移)。 taskService.completeTask(taskId, null) //会抛出一个异常。 taskService.completeTask(taskId, "anyvalue") // 会根据给定的名称使用转移。 taskService.completeTask(taskId, "myName")
3.如果一个任务拥有多个外向转移,其中一个转移没有名称,其他转移都有名称:
//返回包含一个null值和其他转移名称的集合。 taskService.getOutcomes() //会使用没有名字的转移。 taskService.completeTask(taskId) //会使用没有名字的转移。 taskService.completeTask(taskId, null) //会抛出异常。 taskService.completeTask(taskId, "anyvalue") //会使用名字为'myName'的转移。 taskService.completeTask(taskId, "myName")
4.如果一个任务拥有多个外向转移,每个转移都拥有唯一的名字:
//返回包含所有转移名称的集合 taskService.getOutcomes() //会抛出异常,因为这里没有无名称的转移。 taskService.completeTask(taskId) //会抛出异常,因为这里没有无名称的转移 taskService.completeTask(taskId, null) //会抛出异常 taskService.completeTask(taskId, "anyvalue") //会使用名字为'myName'的转移 taskService.completeTask(taskId, "myName")
解决方案:
根据以上分析,可得到解决方案:
1、只拥有一个外向转移时(对应上文所述1、2情况):
Map map = new HashMap();map.put("",……) //各种参数 taskService.setVariables(taskId,map); taskService.completeTask(taskId);
2、拥有多个外向转移时(上文3、4种情况):
Map map = new HashMap();map.put("",……) //各种参数 taskService.setVariables(taskId,map); //如想转移至有名称的外向转移: taskService.completeTask(taskId,"外向转移名称"); //如想转移至无名称的外向转移: taskService.completeTask(taskId);
相关推荐
1. **基础概念:JBPM_(1)_Basics_new.ppt** - **业务流程管理(BPM)**:BPM是一种系统方法,通过改进和自动化业务流程,以提高效率和响应速度。 - **工作流**:定义了业务过程的逻辑顺序,描述了任务如何在参与者...
总的来说,这个主题资料包提供了jbpm4和jbpm5的基础知识、实战经验和用户操作指导,对于想要学习或深化jbpm流程管理框架理解的开发者非常有价值。通过学习这些文档,开发者可以掌握jbpm的核心概念,熟练地设计和部署...
这部分通常会介绍JBPM的基本概念、特点以及其在业务流程管理中的作用。JBPM 提供了一种模型驱动的方法来定义和执行业务流程,支持BPMN(Business Process Modeling Notation)标准,使得流程设计更直观易懂。它还...
JBPM4(Java Business Process Management 4)是一个轻量级的开源工作流管理系统,基于J2EE架构,旨在帮助开发者实现复杂的业务流程自动化。该项目于2004年10月18日发布2.0版本,并随后成为JBoss企业中间件平台的一...
这个“请假例子”旨在帮助初学者快速理解JBPM4的基本概念和操作。 1. **流程定义**:在JBPM4中,业务流程是通过BPML(Business Process Modeling Language)或者BPMN(Business Process Model and Notation)来定义...
- **基础概念:** 介绍工作流、BPMN(业务流程建模符号)、jBPM4中的关键术语和概念,帮助开发者建立基础知识体系。 - **流程定义:** 深入讲解jPDL、流程图的创建和编辑,让开发者学会如何定义业务流程。 - **...
系统应支持对每个任务动态指派用户或用户组,JBPM提供了前后绑定用户的概念,即在设计时预设用户(前绑定)和在运行时动态指派用户(后绑定)。后绑定用户提供了更大的灵活性,便于流程的动态调整。 数据库设计方面...
"JBPM7基础开发" JBPM7 基础开发是基于流程引擎的开发方式和实现方式的简单说明。流程引擎是一个自动化管理和优化流程的工具,旨在提高不同部门之间业务的整合效率,降低开发和维护成本。 概念1:BPM(业务流程...
【标题】"完整工作流JBPM项目实战全过程教程2---项目详细...总之,这个教程是一个全面了解和掌握JBPM工作流管理系统的宝贵资源,涵盖了从基础概念到实际操作的多个层面,适合希望提升企业级业务流程管理能力的开发者。
2. **基础概念介绍**:解释 BPMN 2.0 流程图元素,以及 jBPM4 中的术语,如流程定义、流程实例、任务等。 3. **流程建模**:演示如何使用 jBPM4 工具创建流程模型,包括任务、分支、决策节点等。 4. **源码解析**:...
`JBPM4_TASK`表用于管理任务。每个任务都关联着一个或多个活动,并且可以包含分配给特定用户或角色的任务。这些任务可能是人工任务,也可能是自动化任务的一部分。 #### 8. `JBPM4_PARTICIPATION` 此表存储了参与...
4. **任务管理**:jbpm3提供了一个任务服务,用于处理任务的创建、分配、完成和撤销。它支持用户界面与任务服务的交互,使得用户可以方便地查看和处理待办事项。 5. **规则集成**:jbpm3能够与规则引擎(如Drools)...
51CTO下载的《jBPM4工作流应用开发指南》PDF文件是其中的一份详细的学习资料,涵盖了从基础概念到高级用法的全面指导。 通过学习和实践jBPM4,开发者能够构建出灵活、可扩展且易于维护的工作流应用,以满足企业复杂...
4. **任务管理**:分配、接收、完成任务,支持多任务并发和任务重定向。 5. **事件处理**:支持监听和响应各种流程事件,如任务完成、流程结束等。 6. **规则引擎**:集成Drools规则引擎,使得流程可以根据预定义的...
- **监控与管理**:通过JBPM4提供的管理界面,查看流程实例的状态,跟踪任务进度,进行审计和报表分析。 ### 6. 学习资源 - 官方文档:JBPM4的官方文档详细介绍了各个组件和API的使用,是学习的基础。 - 示例代码...
本套基础视频教程将引导学习者深入理解jbpm的核心概念和技术。首先,我们会介绍jbpm的安装与配置,包括下载jbpm的最新版本,设置开发环境,如集成IDEA或Eclipse等开发工具,并讲解如何配置数据库连接,以便jbpm能够...
7. **任务管理和工作流**:jbpm支持复杂的任务分配和协作,例如,可以根据角色、表达式或业务规则分配任务。同时,它提供了任务完成、委托、重新分配等操作。 8. **流程审计和跟踪**:jbpm记录了流程实例的完整历史...
- **jbpm Console**:Web管理界面,用于监控流程实例、任务管理和日志查看。 - **jbpm Workbench**:集成了Designer和Console,提供更丰富的功能,包括测试、调试和部署。 5. **实现与部署**: - **流程定义...