`

JBPM 实现动态退回路径

    博客分类:
  • JBPM
阅读更多
一般我们设计流程都需要考虑退回问题,这样,较多的转移路径被设计。
我们可以考虑一般简单行的回退问题:即在明确各个流程回退的路径下,我们可以设置动态路径。

如图:




使用了动态回退后




呵呵,相对简单一些。流程也好看一些。
现在分析一下思路:
1.需要设置退回的监听器,在流程运行的时候,自动创建退回的路径
2.封装退回任务的调用。

具体的设计:
1流程设计

在task节点下添加监听器,设置回退路径m_rollbackTo:
 
 <on event="start">
      		<event-listener class="com.shangwang.workFlow.RollbackListener">
      			<field name="m_rollbackTo">
      				<string value="申请"/>
      			</field>
      		</event-listener>
 </on>


2.完成监听器的退回路径创建:
/**
	 * 增加一条用户退回的路径
	 */
	public void notify(EventListenerExecution execution) throws Exception {
		//获取流程定义对象
		ProcessInstance  processInstance = execution.getProcessInstance();
		String processDefinitionId  = processInstance.getProcessDefinitionId();
		ProcessDefinitionImpl processDefinition = (ProcessDefinitionImpl) processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).uniqueResult();
		
		//获取退回目的地的活动定义对象
		ActivityImpl toActivityImpl = processDefinition.findActivity(m_rollbackTo);
		
		//退回活动目的地不存在,流程定义错误
		if(null == toActivityImpl){
			String ms  = "in "+processDefinitionId+" no "+ m_rollbackTo;
			throw new Exception(ms);
		}
		//获得当前活动的定义对象
		ActivityImpl fromActivityImpl = ((ExecutionImpl)execution).getActivity();
		
		//建立退回的转移路径
		TransitionImpl transtion = fromActivityImpl.createOutgoingTransition();
		String tranName = fromActivityImpl.getName() + "to " + m_rollbackTo;
		transtion.setName(tranName);
		transtion.setDestination(toActivityImpl);	
		//removeOutgoingTransition(transition);
		
		
		
		
	}


需要注意的是RollbackListener是实现org.jbpm.api.listener.EventListener接口,实现notify()方法。
3.封装退回任务的调用,编写了一个TaskRollbackService的服务:
//获取流程引擎
	private static final ProcessEngine  processEngine = Configuration.getProcessEngine();
	//获取任务服务
	private static final TaskService  taskService = processEngine.getTaskService();
	
	public void completeTaskRollback(String taskId,String rollbackToActName){
		Task task = taskService.getTask(taskId);		
		taskService.completeTask(task.getId(),task.getActivityName()+"to "+rollbackToActName);			
	}



调用的时候注意一下参数传递:taskId是流程ID,rollbackToActName是回退路径!
分享到:
评论

相关推荐

    jbpm4.4 动态设置参与人数

    本文将详细介绍如何在JBPM 4.4中实现动态设置参与人数的功能,这对于提高业务流程的灵活性和适应性具有重要意义。 #### 一、JBPM 4.4简介 JBPM 4.4是一款基于Java的企业级工作流管理系统,它支持BPMN2.0规范,提供...

    使用JBoss jBPM实现流程访问和执行的授权

    使用JBoss jBPM实现流程访问和执行的授权

    jBPM4.4 自由流之退回

    在jBPM的流程图中,可以通过添加特殊的退回节点或者使用条件分支来实现。 2. **流程实例管理**:在流程实例运行过程中,系统需要跟踪当前状态,以便在需要时能正确回退。这可能涉及到保存历史步骤和状态的信息。 3...

    jbpm4jbpm5

    jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. **jbpm4表结构和表字段说明**: jbpm4.3表结构和表字段说明文档通常会详细...

    JBPM 流程 监控 的实现

    4. **集成第三方监控工具**:可以将JBPM与像Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)等监控工具集成,通过这些工具的强大分析能力来实现对JBPM流程的性能监控和故障排查。 5. **扩展jbpm-console...

    jbpm-3.1.2.zip_jbpm_jbpm 3.1.2_jbpm-3.1.2.rar_jbpm3.1.2_工作流

    2. **规则集成**:jBpm 集成了规则引擎,如 Drools,使业务流程能够根据预定义的规则进行动态决策。 3. **事件处理**:支持各种事件处理,如定时器事件、信号事件等,增强了流程的灵活性。 4. **持久化**:通过 ...

    jbpm开发指南--jbpm全面介绍

    通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...

    JBPM实现的OA工作流源文件

    JBPM不仅提供了流程建模工具,还提供了执行引擎,能够动态地运行这些流程。 在OA工作流实现中,JBPM通常与数据库、服务调用、用户界面等组件集成。数据库用于存储流程实例、任务、变量等信息;服务调用则用于在流程...

    JBPM流程监控的实现过程

    本文将深入探讨如何通过手工编码方式在JBPM中实现流程监控,包括如何监控已发布流程的状态、流程实例的动态以及任务实例的执行情况。 #### 一、理解流程监控的核心需求 流程监控的核心目标在于实时掌握系统内流程...

    jbpm4.3 会签的实现

    【jbpm4.3 会签的实现】 在企业级工作流管理系统中,会签(Concurrence Signature)是一种常见的审批流程模式,它允许多个审批人同时参与同一个任务的处理,只有当所有指定的审批人都完成他们的操作后,任务才会被...

    通过jbpm源码分析jbpm引擎内核工作原理

    通过jbpm源码分析jbpm引擎内核工作原理

    jbpm学习资料,jbpm教程

    3. **分支与合并**:通过条件节点,jPDL可以实现流程的分支,根据不同的条件执行不同的路径。合并节点则用来聚合分支路径,当所有分支都完成时,流程继续进行。 4. **事件处理**:jPDL支持各种事件,如时间触发事件...

    jbpm简介\jbpm简介

    ### jBPM简介与关键技术知识点 #### 一、jBPM概述 jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用...

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    jBPM3.2.rar_JBPM3.2_jbpm_jbpm 3.2_jbpm3_jbpm3.2教程

    2. **动态流程**:jbPM允许在运行时修改流程,增强了流程的灵活性和适应性。 3. **事件处理**:jbPM支持各种事件,如定时器事件、信号事件,可以实现复杂的流程控制逻辑。 4. **服务整合**:jbPM可以通过服务调用...

    JBPM7基础开发

    JBPM7 基础开发是基于流程引擎的开发方式和实现方式的简单说明。流程引擎是一个自动化管理和优化流程的工具,旨在提高不同部门之间业务的整合效率,降低开发和维护成本。 概念1:BPM(业务流程管理) BPM 是一种...

    jbpm 案例 jbpm jbpm

    jbpm使用案例,非常不错,大家都来看看吧。

    jBPM4.4.rar_jbpm4.4_jbpm4.4 PDF

    6. **监控和调试**:jBPM4.4提供了一个强大的监控工具,能够跟踪流程实例的执行路径,帮助开发者调试和优化流程。 7. **集成能力**:jBPM可以方便地与其他Java应用服务器,如Tomcat、JBoss等集成,同时也支持Spring...

    JBPM绑定自定义用户模型实现授权

    这个类需要实现JBPM的`AssignmentHandler`接口,从而在流程执行过程中动态处理任务的分配。 下面是一个简化的自定义AssignmentHandler的实现步骤: 1. 创建一个类实现`org.drools.process.instance.impl....

Global site tag (gtag.js) - Google Analytics