一般我们设计流程都需要考虑退回问题,这样,较多的转移路径被设计。
我们可以考虑一般简单行的回退问题:即在明确各个流程回退的路径下,我们可以设置动态路径。
如图:
使用了动态回退后
呵呵,相对简单一些。流程也好看一些。
现在分析一下思路:
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是回退路径!
分享到:
相关推荐
本文将详细介绍如何在JBPM 4.4中实现动态设置参与人数的功能,这对于提高业务流程的灵活性和适应性具有重要意义。 #### 一、JBPM 4.4简介 JBPM 4.4是一款基于Java的企业级工作流管理系统,它支持BPMN2.0规范,提供...
jbpm教程、jbpm动态设置参与者、jbpm实例下载
使用JBoss jBPM实现流程访问和执行的授权
在jBPM的流程图中,可以通过添加特殊的退回节点或者使用条件分支来实现。 2. **流程实例管理**:在流程实例运行过程中,系统需要跟踪当前状态,以便在需要时能正确回退。这可能涉及到保存历史步骤和状态的信息。 3...
jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. **jbpm4表结构和表字段说明**: jbpm4.3表结构和表字段说明文档通常会详细...
4. **集成第三方监控工具**:可以将JBPM与像Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)等监控工具集成,通过这些工具的强大分析能力来实现对JBPM流程的性能监控和故障排查。 5. **扩展jbpm-console...
2. **规则集成**:jBpm 集成了规则引擎,如 Drools,使业务流程能够根据预定义的规则进行动态决策。 3. **事件处理**:支持各种事件处理,如定时器事件、信号事件等,增强了流程的灵活性。 4. **持久化**:通过 ...
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
JBPM不仅提供了流程建模工具,还提供了执行引擎,能够动态地运行这些流程。 在OA工作流实现中,JBPM通常与数据库、服务调用、用户界面等组件集成。数据库用于存储流程实例、任务、变量等信息;服务调用则用于在流程...
本文将深入探讨如何通过手工编码方式在JBPM中实现流程监控,包括如何监控已发布流程的状态、流程实例的动态以及任务实例的执行情况。 #### 一、理解流程监控的核心需求 流程监控的核心目标在于实时掌握系统内流程...
【jbpm4.3 会签的实现】 在企业级工作流管理系统中,会签(Concurrence Signature)是一种常见的审批流程模式,它允许多个审批人同时参与同一个任务的处理,只有当所有指定的审批人都完成他们的操作后,任务才会被...
通过jbpm源码分析jbpm引擎内核工作原理
3. **分支与合并**:通过条件节点,jPDL可以实现流程的分支,根据不同的条件执行不同的路径。合并节点则用来聚合分支路径,当所有分支都完成时,流程继续进行。 4. **事件处理**:jPDL支持各种事件,如时间触发事件...
### jBPM简介与关键技术知识点 #### 一、jBPM概述 jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用...
jbpm jbpm4.3.jar DDDDDDDD
2. **动态流程**:jbPM允许在运行时修改流程,增强了流程的灵活性和适应性。 3. **事件处理**:jbPM支持各种事件,如定时器事件、信号事件,可以实现复杂的流程控制逻辑。 4. **服务整合**:jbPM可以通过服务调用...
JBPM7 基础开发是基于流程引擎的开发方式和实现方式的简单说明。流程引擎是一个自动化管理和优化流程的工具,旨在提高不同部门之间业务的整合效率,降低开发和维护成本。 概念1:BPM(业务流程管理) BPM 是一种...
jbpm使用案例,非常不错,大家都来看看吧。
6. **监控和调试**:jBPM4.4提供了一个强大的监控工具,能够跟踪流程实例的执行路径,帮助开发者调试和优化流程。 7. **集成能力**:jBPM可以方便地与其他Java应用服务器,如Tomcat、JBoss等集成,同时也支持Spring...
这个类需要实现JBPM的`AssignmentHandler`接口,从而在流程执行过程中动态处理任务的分配。 下面是一个简化的自定义AssignmentHandler的实现步骤: 1. 创建一个类实现`org.drools.process.instance.impl....