`
man1900
  • 浏览: 432854 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JBPM4中的任务回退、补签、自由流程实现

    博客分类:
  • JBPM
阅读更多

最近在实施政府办公项目的时候,经常有客户在问,公文的流程能否自由流转,如我在拟稿完成后,直接归档,不需要再经过核稿与审批流程。同样,我可以在任何一个任务上,直接把任务回退到以上任何一个环节,如,在审批的过程中,若不合适,可以直接回退至拟稿任务。如下图所示:

 



    非常幸运,JBPM4也提供了给我们动态创建Transition的接口。即在当前的节点中,动态创建出当前节点所有的跳转的Transition,问题是如果你给你的活动节点创建了连接后,下一次进入该任务时,不能显示这些动态创建的连接。否则当前任务的跳转连接会越来越多。

      所以对于那些在两个节点间不存在的连接,而又想实现这两个节点的跳转的话,就需要动态创建连接,然后再实现任务跳转,跳转后再进行删除连接。相当于现实中我们所说的过河拆桥模式。

 

     有了这种思想,Jbpm实现任务回退、补签等操作都是相当容易。

 

 

动态创建:

 

	 /**
	  * 动态创建连接当前任务节点至名称为destName的节点的Transition
	  * @param taskId 任务节点ID
	  * @param sourceName 源节点名称
	  * @param destName  目标节点名称
	  */
	 public void addOutTransition(ProcessDefinitionImpl pd,String sourceName,String destName){

		 EnvironmentFactory environmentFactory = (EnvironmentFactory) processEngine;
		 Environment env=null;
		 try {
			 env = environmentFactory.openEnvironment();
			 //取得当前流程的活动定义
			 ActivityImpl sourceActivity = pd.findActivity(sourceName);
			 //取得目标的活动定义
			 ActivityImpl destActivity=pd.findActivity(destName);

			 //为两个节点创建连接

			 TransitionImpl transition = sourceActivity.createOutgoingTransition();

			 transition.setName("to" + destName);

			 transition.setDestination(destActivity);

			 sourceActivity.addOutgoingTransition(transition);

		 }catch(Exception ex){
			 logger.error(ex.getMessage());

		 }finally{
			 if(env!=null)env.close();

		 }
	 }

  动态删除:

 

 

	 /**
	  * 动态删除连接sourceName与destName的Transition
	  * @param taskId
	  * @param sourceName
	  * @param destName
	  */
	 public void removeOutTransition(ProcessDefinitionImpl pd,String sourceName,String destName){
		 EnvironmentFactory environmentFactory = (EnvironmentFactory) processEngine;
		 Environment env=null;
		 try {
			 env = environmentFactory.openEnvironment();
			 //取得当前流程的活动定义
			 ActivityImpl sourceActivity = pd.findActivity(sourceName);
			 
			 //若存在这个连接,则需要把该连接删除
			 List<Transition> trans=sourceActivity.getOutgoingTransitions();
			 for(Transition tran:trans){
				if(destName.equals(tran.getDestination().getName())){//删除该连接
					trans.remove(tran);
					break;
				}
			 }
		 }catch(Exception ex){
			 logger.error(ex.getMessage());
		 }finally{
			 if(env!=null)env.close();
		 }
	 }

 

其实现效果如下所示,可以跳至任何节点,并且可以指派给任何人。

 

指定至相关人员:

 

 

 

  • 大小: 32.1 KB
  • 大小: 94.9 KB
  • 大小: 51.8 KB
  • 大小: 87.9 KB
9
2
分享到:
评论
11 楼 fatter 2012-07-11  
是啊,lz,贴点代码出来呀
10 楼 wangsang111 2012-03-28  
您好,怎么调用自动创建的transcation呢,谢谢
9 楼 man1900 2011-08-20  
是的,没有用到
8 楼 tearaskflower 2011-08-20  
你好,楼主,回退,你没用监听器吗?
7 楼 peter2009 2011-03-11  
能否提供一下源码看看

为什么我取回了原来的任务后重新提交后
总是提交不了呢

还需要提供删除创建的自由流程吗
6 楼 ixujieyun 2010-12-23  
你好。我跟具您的代码做了测试,成功创建了自有流但是发现有个问题就是,创建数据成功之后无法将数据真正的保存到数据库中,没有真正提交数据,在AS运行状态下执行了但是数据库里的任务还是在原来的节点,请问这是为什么
5 楼 280946352 2010-12-17  
你好,楼主:能共享一下你的完整的源码吗?正在用JBPM4.4研究自由流程,想参考一下你的源码
4 楼 man1900 2010-07-29  
最近开发任务比较多,没有时间整理,等忙完这段时间,把代码给大家共享一下
3 楼 zhutuncun0 2010-07-29  
还有我也像你这的添加Transition,但是CompleteTask的时候老是报 找不到该Transition 名字错误,是什么导致的,是事务吗?我没有集成到spring中
2 楼 zhutuncun0 2010-07-29  
我也是刚要入门的,看论坛有人使用的ExecutionImpl.moveTo()方法,但是我没有成功实现回退,能否给解释下,同时也请求共享一下:zhutuncun0@sina.com
1 楼 fucktianya 2010-06-10  
兄弟,可不可以把详细点的代码发给我看看啊,

我正在使用JBPM4,也想实现你说的这个任务回退和自由流程的问题

可因为是刚学,所以不是很明白,所以想请你把可以共享的代码发我一份好不?

我的邮箱caoshuo@sohu.com

相关推荐

    JOffice2中的JBPM4的任务回退实现

    总的来说,JOffice2中的JBPM4任务回退功能提供了灵活的方式来处理流程中的错误或异常情况,而无需完全重新启动流程。通过这两种实现方式,开发人员可以根据具体需求选择最适合的策略,以确保流程管理的有效性和效率...

    JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)

    标题中的“JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)”是指在使用JBPM(Java Business Process Management)4.4版本时,设计了一个特殊的流程控制机制,允许用户在执行流程过程中进行回...

    jbpm4.4 请假的例子,包含Jar包,实现回退功能可以运行

    在JBPM4.4版本中,我们可以看到一个具体的请假流程示例,该示例包含了实现回退功能的完整代码和Jar包,便于开发者理解和学习。 1. **流程设计** JBPM使用BPMN2.0(Business Process Model and Notation)标准进行...

    jbpm4流程提交及执行完整代码

    在jbpm4中,我们可以通过服务接口来启动流程实例、完成任务、查询流程状态等。这个文件可能包含诸如`startProcessInstanceByKey`(根据流程定义的关键字启动流程)和`completeTask`(完成当前任务节点)等方法。理解...

    jbpm4 完整的请假流程

    jbpm4是一个基于Java的...通过深入研究这个“jbpm4 完整的请假流程”,不仅可以掌握jbpm4的基本用法,还能理解业务流程管理系统的运作机制,这对于在实际工作中设计和实现复杂的企业级流程管理解决方案具有重要意义。

    JBPM4 开发文档 实例 流程

    - **部署流程**:通过deploy操作,会在相应的表中创建记录,如jbpm4_deployment、jbpm4_deployprop和jbpm4_lob。 - **启动流程实例**:调用startProcessInstanceByKey方法,会在执行表jbpm4_execution、历史记录表...

    jbpm4jbpm5

    jbpm4.3表结构和表字段说明文档通常会详细介绍jbpm4中涉及的数据库表,包括实体如任务实例(TaskInstance)、流程实例(ProcessInstance)、工作项(WorkItem)等的表结构和字段。这些信息对于开发者来说至关重要,...

    jbpm4源代码 简单实现公文流转

    3. **持久化**:jbpm4利用JPA(Java Persistence API)进行持久化管理,可以将流程实例、任务信息等数据存储在数据库中,确保数据的安全性和可靠性。 4. **规则集成**:jbpm4集成了Drools规则引擎,可以在流程执行...

    JBPM4.4完整可用审批流程

    在实际应用中,开发者需要了解JBPM4的工作原理,包括流程实例、任务实例、信号和事件的概念,以及如何通过API或服务任务与外部系统交互。熟悉Maven的使用也是至关重要的,包括理解POM文件的结构、如何添加和排除依赖...

    JBoss JBPM4请假流程示例

    在JBoss JBPM4中,一个流程通常由一系列任务组成,这些任务可以由系统自动执行,也可以由人参与完成。请假流程就是一个典型的人工参与的任务流程,包括请假申请、审批等步骤。在这个示例中,我们将探讨以下几个关键...

    JBPM7基础开发

    在开发中,主要使用 API 来实现流程的管理和执行。KieService 是 JBPM6 中的一个重要的 API,用于获取流程管理策略和资源加载源选取。KieContainer 是一个资源库和会话接口封装,提供了 KieBase、KieSession 和 ...

    JBPM 流程 监控 的实现

    6. **使用流程审计表**:JBPM的持久化机制会将流程实例和任务的状态记录在数据库的审计表中,可以通过查询这些审计表来获取流程的运行状态,从而实现监控。 7. **设计和实现监控服务**:创建一个独立的服务,该服务...

    jbpm4案例源码

    开发者可以通过查看和运行这些源代码,学习如何创建用户交互界面、与jbpm4服务交互以及如何实现流程的生命周期管理。 jbpm4还支持扩展和定制,例如,你可以通过编写自定义的工作流监听器、任务监听器和事件处理器来...

    extjs jbpm4流程设计器

    ExtJS和jBPM4是两个在IT领域中用于构建企业级应用的重要工具。ExtJS是一个JavaScript库,专用于创建富客户端用户界面,而jBPM4则是一个工作流管理系统,用于管理和执行业务流程。本篇文章将深入探讨这两个技术如何...

    jbpm4 s2sh 请假流程

    【jbpm4 s2sh 请假流程】是一个基于jbpm工作流引擎和SSH(Struts2、Spring、Hibernate)框架的简单示例应用,用于演示如何在Java Web环境中实现一个请假流程。在这个教程中,我们将深入理解jbpm4的工作原理以及如何...

    JBPM视屏教程共9节 jBPM 4视频教程04设计请假流程

    学习者将学习到如何使用jBPM的建模工具创建流程图,配置任务节点、事件和决策,以及如何通过代码实现流程的启动和控制。同时,这个系列教程可能还涵盖了流程实例的监控、跟踪和优化等高级主题,帮助开发者或业务分析...

    JBPM流程监控的实现过程

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

    根据jbpm4的.jpdl.xml流程定义文件,绘制出流程图

    本篇我们将聚焦于Jbpm4中的流程定义文件——jpdl.xml,以及如何根据该文件绘制出对应的流程图。 首先,我们要理解什么是JPDL(Jbpm Process Definition Language)。JPDL是一种基于XML的语言,用于描述Jbpm中的业务...

Global site tag (gtag.js) - Google Analytics