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

JOffice2中的JBPM4的任务回退实现

    博客分类:
  • JBPM
阅读更多

任务回退的工作可以有两种实现方式:

     1. 完成当前任务,产生新的后退任务

     2. 不需要完成当前任务,让当前任务直接指向后退的节点。

 

第一种方式,是joffice1提供的实现,其实现原理就需要有一个completeTask与newTask的动作。在jbpm4的流程历史中有记录这个跳转的过程,

 

第二种方式是joffice2提供的实现,其没有ComplteTask与newTask的动作,只有changeTaskDefintion与change assignee的动作。

 

以下为其实现的代码细节,测试过可以使用,

 

/**
	 * 从当前任务跳回上一任务
	 * @param curTask 当前任务对象
	 * @param preTaskName 前一任务名称 
	 * @param assignee 前一任务执行人ID
	 * @return
	 */
	public Task jumpToPreTask(Task curTask,String preTaskName,String assignee){
		EnvironmentImpl env=null;
		try{
			TaskImpl task=(TaskImpl)curTask;
			env=((EnvironmentFactory) processEngine).openEnvironment();
			ProcessInstance pi=getProcessInstanceByTaskId(curTask.getId());
			
			ProcessDefinitionImpl pd=(ProcessDefinitionImpl)getProcessDefinitionByTaskId(curTask.getId());
			TaskDefinitionImpl taskDef= pd.getTaskDefinition(preTaskName);
			//更换其Execution
			ExecutionImpl exeImpl=(ExecutionImpl)pi;
			//更换其活动的定义
			Activity preActivity=pd.findActivity(preTaskName);
			exeImpl.setActivity(preActivity);
			task.setActivityName(preTaskName);
			task.setName(preTaskName);
			task.setDescription(preTaskName);
			task.setExecution(exeImpl);
			//更换执行人
			task.setAssignee(assignee);
			task.setCreateTime(new Date());
			task.setSignalling(true);
			//task.setNew(true);
			//更换流程任务的定义
			if(taskDef!=null){
				task.setTaskDefinition(taskDef);
			}else{
				//查看其是否为开始任务,这表示开始任务TODO
				//String startName=jbpmService.getStartNodeName();
				TaskDefinitionImpl taskDefinition = new TaskDefinitionImpl();
			    taskDefinition.setName(preTaskName);
			    taskDefinition.setPriority(1);
			    taskDefinition.setProcessDefinition(pd);
			    
			    ActivityImpl startActivityImpl=pd.findActivity(preTaskName);
			    
			    ActivityImpl startTaskImpl=pd.createActivity();
			    startTaskImpl.setName(preTaskName);
			    List outTrans=new ArrayList();
			    outTrans.addAll(startActivityImpl.getOutgoingTransitions());
			    startTaskImpl.setOutgoingTransitions(outTrans);
			
			}
			taskService.saveTask(task);
			return task;
		}finally{
			if(env!=null)env.close();
		}
	}
	

 第二种方式在Jbpm4的历史表中并没有记录,但我们可以不用jbpm4自带的流程历史,可以加上我们自己的流程历史,这如下图所示:

 

 

目前存在的问题就是不能退回至开始节点,不过有一想法就是可以让动态创建一任务为开始任务,让流程退回这里,但可惜的是,退回是可以,不过再让它往下走的话,就会出现节点类型不能转化的错误。

 

 

 

  • 大小: 60 KB
分享到:
评论
4 楼 man1900 2011-07-03  
回到原来的会签任务,那么原来的会签任务就会产生,这块joffice2有考虑了
3 楼 chaoyy 2011-07-02  
那如果当前的任务来源于前面的会签任务,如何回退到会签之初的活动上呢?
2 楼 liufangzhaoly 2011-01-20  
 
              
           ProcessInstance pi=getProcessInstanceByTaskId(curTask.getId());  
           TaskDefinitionImpl taskDef= pd.getTaskDefinition(preTaskName);  

这两个get都不晓得是那个类的。。
1 楼 liufangzhaoly 2011-01-20  
  看你的代码逻辑感觉是没有问题的?
  但是我想问一个问题,就是这个方法放在什么类里?是随意的一个java类里吗 只要我想实现回退 jsp里声明这个类然后调用方法传递方法需要的参数就可以了

相关推荐

    JOffice V1.2 beta

    这个JOffice V1.2 beta版,也就是官方说开源的版本之一。 说实话,这个公司很讨厌,打着开源的幌子来宣传自己的产品,里面的 东西根本没有开源,还很恶心的包留了一部分代码,htcore.jar。 对于这样的开源,我表示...

    JOffice1.3使用手册.

    关于 JOffice1.3使用手册,方便快捷,大家来下载

    joffice技术框架介绍

    ### joffice技术框架介绍 #### 一、概述 jOffice技术框架是一款专为协同办公(OA)系统设计的开发框架,旨在提供一套完整的解决方案来满足企业级应用的需求。该框架支持多种办公自动化功能,包括但不限于公文管理...

    joffice文档

    // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CChatApp 对象 CChatApp theApp; // CChatApp 初始化 BOOL CChatApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定...

    joffice文档转pdf再转swf

    office文档转pdf后,再转swf,最终显示需要的一些工具及jar包,包括一个office转pdf转swf的java文件。因目前可上传的文件大小限制,OpenOffice安装文件未上传,工具目前最新版本为3.4.1,请另行下载

    权限实现实例(Ext+java)

    在JOffice中,权限管理采用了基于角色的管理策略,这使得系统能够高效地实现对用户访问权限的控制。这种策略与Spring Security 2框架相结合,允许开发者通过配置文件对整个系统的权限进行集中管理。Spring Security...

    java extjs 仿163邮箱源码

    在163邮箱的仿制品中,ExtJS将承担创建邮箱界面的任务,如收件箱、发件箱、写信、设置等功能。 **163邮箱仿制** 163邮箱是中国知名的一款电子邮件服务,其界面设计和用户体验被广泛认可。仿制163邮箱意味着我们需要...

    java资料下载java资料下载java资料下载java资料下载

    在`log4j.xml`配置文件中调整日志级别和输出位置,以便查看程序运行时的详细信息。 在解决可能出现的问题时,需要检查JDK是否满足1.6及以上版本,数据库编码是否已设置为UTF-8。此外,配置文件的正确性,如`jdbc....

    SSH开发的办公自动化系统 OA

    在压缩包文件"joffice"中,很可能包含了实现上述功能的源代码、配置文件、数据库脚本以及可能的部署相关文件。开发者可以通过分析这些文件,了解SSH框架在实际项目中的应用方式,学习如何构建和优化一个完整的办公...

    IReport3.6报表使用说明

    11. **上传至JOffice系统**: 完成设计后,将.jasper文件上传至报表管理系统,设定参数以便在系统中运行。 12. **参数设置和数据初始值**: 在报表参数设置中,指定参数的默认值或允许用户输入。这样,报表在运行时...

    SVN 源码 地址

    - **Tomcat**:一款轻量级的Servlet容器,也是Java Web开发中最常用的Web服务器之一。 - **OpenJPA**:一个实现了Java Persistence API (JPA)的持久化解决方案。 - **Subversion (SVN)**:一个集中式的版本控制系统...

    java打jar包方法

    本教程的目标是将位于`D:\myfile`目录下的所有文件及其子目录打包到名为`license.jar`的JAR文件中。 #### 步骤详解 ##### 第一步:切换到指定目录 首先,打开命令提示符(CMD)。可以通过在Windows搜索框中键入...

    为Extjs加加速(javascript加速)

    在ExtJS应用中,较大的JavaScript文件如ext-all-debug.js可能达到2MB以上,即使其压缩版本也高达600KB。通过使用Gzip对这些文件进行压缩,它们的大小可以减小到原来的四分之一甚至更少。举例来说,一个600KB的...

    JoPro:一个应用程序中的生产力和Office套件。-开源

    JoPro是一个生产力和办公套件,将文字处理器,电子表格设计器,演示设计器和svg查看器集成到一个应用程序中! 基于Netbeans平台。 图像和代码由Anthony Goubard设计。 最初称为Joffice。

    JOffVis:基于 Swing(Java)的工具,用于可视化 BIFF(二进制交换文件格式)文件

    JOffVis 一个基于 Java Swing 的工具,用于可视化 ...先决条件:1) Java SDK 72) Maven 3要编译应用程序,请运行以下命令mvn 干净编译要启动应用程序,请运行以下命令mvn exec:java -Dexec.mainClass="joffice.gui.App

Global site tag (gtag.js) - Google Analytics