`
HelloTommy
  • 浏览: 98643 次
  • 性别: Icon_minigender_1
  • 来自: 慈溪
社区版块
存档分类
最新评论

jBPM4实战系列(二)jBPM4.3+ssh+会签 整合配置及完整实例

    博客分类:
  • jBPM
阅读更多

      大佬们的项目里有用到会签,所以趁双休日研究了下。

      其实也是简单的会签情况,不过开始的时候研究了4.4,(因为先前研究的都是4.4),发现4.4跟4.3的处理方法完全不一样,搞的我比较郁闷……弄了一天,都是一个老问题,就是在历史记录表中查不到记录。后来查了很多资料,才觉悟4.4的处理方式确实不同于4.3。

      4.3中的实现还是很简单的。实例中使用custom节点。

      例子是前几次实例中的请假,就很简单的申请——manager和boss进行会签——同意则继续,不同意返回。

     

      下面是主要的类及说明

     

package com.ht.util;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.TaskService;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.api.activity.ExternalActivityBehaviour;
import org.jbpm.api.task.Task;
import org.jbpm.pvm.internal.env.EnvironmentImpl;
import org.jbpm.pvm.internal.history.HistoryEvent;
import org.jbpm.pvm.internal.history.events.TaskActivityStart;
import org.jbpm.pvm.internal.model.Activity;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.model.Transition;
import org.jbpm.pvm.internal.session.DbSession;
import org.jbpm.pvm.internal.task.TaskImpl;

/**
 * 
 * @author tommy
 * 会签类
 */
public class Huiqian implements ExternalActivityBehaviour {

	private static final long serialVersionUID = 1L;
	private static int count = 0;// 同意人数

	public void signal(ActivityExecution activityExecution, String signalName,
			Map<String, ?> parms) throws Exception {
		ExecutionImpl executionImpl = (ExecutionImpl) activityExecution;
		
		// 获得流程实例
		ProcessInstance pi = (ProcessInstance) executionImpl
				.getProcessInstance();
		
		// 获得任务服务
		TaskService taskService = Configuration.getProcessEngine()
				.getTaskService();
		// 获得活动节点
		Activity activity = executionImpl.getActivity();
		List<Task> tasks = taskService.createTaskQuery().processInstanceId(
				pi.getId()).list();
		TaskImpl parentTask  =(TaskImpl)tasks.get(0);

		// 获得子任务
		List<Task> subTask_list = taskService.getSubTasks(tasks.get(0).getId());
		Iterator<Task> iter = subTask_list.iterator();
		// 循环所有子任务
		while (iter.hasNext()) {
			
			Task subtask = iter.next();
			System.out.println(subtask.getId());
			if (parms.get("name").equals(subtask.getAssignee())) {
				if (parms.get("RESULT").equals("同意")) {
					count++;
				}
				taskService.completeTask(subtask.getId()); // 完成当前会签人子任务
			}
		}

		// 剩余子任务数量为1个时,则直接跳转下一个流程节点
		if (subTask_list == null || subTask_list.size() == 1) {
			Transition transition = null;
			if ((signalName == null)
					|| ((Task.STATE_COMPLETED.equals(signalName))
							&& (activity.getOutgoingTransitions() != null) && (activity
							.getOutgoingTransitions().size() == 1))) {
				transition = activity.getOutgoingTransitions().get(0); // 获得将跳转到的transition
			} else {
				transition = activity.findOutgoingTransition(signalName);
			}
			Map<String, Object> map = new HashMap<String, Object>();
			if (count == 2) {
				count = 0;
				map.put("RESULT", "PASS");

			} else {
				count = 0;
				map.put("RESULT", "NOPASS");
				// System.out.print("会签不通过");
			}
			taskService.completeTask(tasks.get(0).getId(), map); // 结束父任务
			executionImpl.take(transition); // 流程继续

		} else { 
			executionImpl.waitForSignal();
		}

	}

	public void execute(ActivityExecution activityExecution) throws Exception {
		ExecutionImpl executionimpl = (ExecutionImpl) activityExecution;
		DbSession dbsession = EnvironmentImpl.getFromCurrent(DbSession.class);
		TaskImpl taskimpl = dbsession.createTask();
		taskimpl.setName("领导会签");
		taskimpl.setExecution(executionimpl);
		taskimpl.setProcessInstance(executionimpl.getProcessInstance());
		taskimpl.setSignalling(false);
		taskimpl.setExecutionDbid(executionimpl.getDbid());
		dbsession.save(taskimpl);
		HistoryEvent.fire(new TaskActivityStart(taskimpl), executionimpl);
		
		// 从原任务中分出两个子任务
		//子任务1分配给manager
		TaskImpl subtask1 = taskimpl.createSubTask();
		subtask1.setAssignee("manager");
		subtask1.setName("领导会签,操作角色:" + "manager");
		subtask1.setSignalling(false);
		subtask1.setExecution(executionimpl);
		subtask1.setExecutionDbid(executionimpl.getDbid());
		dbsession.save(subtask1);
		HistoryEvent.fire(new TaskActivityStart(subtask1), executionimpl);
		
		
		
		//子任务2分配给boss
		TaskImpl subtask2 = taskimpl.createSubTask();
		subtask2.setAssignee("boss");
		subtask2.setName("领导会签,操作角色:" + "boss");
		subtask2.setSignalling(false);
		subtask2.setExecution(executionimpl);
		subtask2.setExecutionDbid(executionimpl.getDbid());
		dbsession.save(subtask2);
		HistoryEvent.fire(new TaskActivityStart(subtask2), executionimpl);
		
		
		// 流程等待
		executionimpl.waitForSignal();
	}


}

 

      在到custom节点时,执行execute方法,在execute方法中主要是生成2个子节点,并保存进入库表,并且让流程进入等待状态。在每次到达该节点时,就会执行signal方法,进行会签的判断,判断结果根据需要进行一定的处理,当完成自己所需要业务以后可以executionImpl.take(transition),来确定需要跳转的下一个节点。

       也没什么特别复杂的地方,建议使用debug来调试,就会了解整个会签过程了。

       下面分享下源码,由于大小限制,没有jar包

       这次的实例比前2次清爽很多……不过还是有点乱,凑合下吧,主要是了解下整个流程

       myeclipse8.5+jdk1.6+jbpm4.4+spring3.0.3+struts2.2.1+jbpm4.3+sql server 2000下测试通过.

      

  • 大小: 11.8 KB
  • 大小: 14.1 KB
分享到:
评论
2 楼 l1122303 2012-08-10  
学习了
1 楼 xl6861989 2012-04-10  

相关推荐

    jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例

    "jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例" 这个标题表明我们将会探讨一个关于jBPM4的具体实战项目,特别关注的是如何将jBPM4版本与SSH(Spring、Struts和Hibernate)框架整合,并提供了一个完整的实现示例...

    jbpm4.3+struts2+spring3+hibernate3整合(一)

    【标题】"jbpm4.3+struts2+spring3+hibernate3整合(一)"涉及的是一个常见的Java企业级应用架构整合实践,其中jbpm4.3是业务流程管理(Business Process Management)框架,Struts2是MVC(Model-View-Controller)...

    SSH+JBPM4.3的整合 JBPM4.3

    SSH+JBPM4.3的整合是企业级应用开发中的一种常见组合,SSH指的是Spring、Struts和Hibernate这三个开源框架的集成,而JBPM4.3则是一个强大的工作流管理系统,用于实现业务流程自动化。这篇内容将深入探讨这两个技术...

    jBPM4.4+ssh 整合配置及完整实例

    **jBPM4.4与SSH整合配置及完整实例详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于处理业务流程自动化。在本实例中,我们将讨论如何将jBPM 4.4版本与SSH(Spring、Struts、...

    jbpm4.3+servlet+jsp

    jbpm4.3的开发可能需要一系列的库,如jbpm本身的jar包,数据库连接驱动,以及其他辅助库如Spring、Hibernate等,这些库帮助开发者实现业务逻辑,与数据库交互,以及处理其他系统集成。 【压缩包子文件的文件名称...

    jBPM4.3+struts2.1.8+spring2.5整合

    "jBPM4.3+struts2.1.8+spring2.5整合" 这个标题表明我们将探讨一个基于Java的企业级应用开发集成框架。jBPM是业务流程管理(Business Process Management)的一个开源工具,版本4.3,用于管理和执行工作流和业务流程...

    JBPM4.3 整合SSH part1 JBPM4.3 整合 struts2 hibernate spring 请假实例

    JBPM4.3 整合struts2 hibernate spring 请假实例, lib下载,在我的另外资源,路径: http://download.csdn.net/source/2485359 http://download.csdn.net/source/2485373 http://download.csdn.net/source/2485385 ...

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    jbpm4整合struts2+spring2.5+hibernate3.3

    在提供的"jbpm4ssh整合小实例"中,可以深入学习和理解这个集成框架的具体实现细节,包括配置文件、Action类、Service层和DAO层的编写等。这样的整合方案对于开发复杂的业务流程系统具有很高的实用价值,能够帮助...

    JBPM4.3 Spring会签 实例

    **JBPM4.3与Spring整合的会签实例详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程自动化。在JBPM4.3版本中,它提供了一个强大的工作流引擎,可以方便地实现复杂...

    jbpm4.3与spring整合

    本文档将详细介绍如何将JBPM 4.3版本与Spring框架进行整合,包括环境搭建、配置文件调整以及具体的整合步骤等。 #### 一、环境准备 在开始整合之前,我们需要确保具备以下软件环境: - **JBPM版本**:4.3 - **...

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合

    【JBPM4.4+Hibernate3.5.4+Spring3.0.4+Struts2.1.8整合】的整个过程涉及到多个关键组件的集成,这些组件都是Java企业级开发中的重要部分。首先,JBPM(Business Process Management)是一个开源的工作流引擎,它...

    jbpm4.3、ssh环境搭建

    ### jBPM4.3与SSH环境搭建详解 #### 一、引言 jBPM (JBoss Business Process Management) 是一个开源的工作流管理系统,它提供了用于定义业务流程的工具和APIs。本文将详细介绍如何在开发环境中安装并配置jBPM4.3...

    jbpm4.3+tomcat6简单例子

    本示例主要实现了流程的基本管理,流程实例的管理,...使用本例子只需要拷贝jbpm4.3的lib的jar包到本实例lib里面即可运行,注意用tomcat6的话必须把juel.jar,juel-engine.jar、juel-impl.jar剪切到tomcat的lib目录下。

    jbpm jbpm3 jbpm4 用户和开发指南+教程+最佳实践全套

    jbpm3作为早期版本,其用户文档详细介绍了如何配置、部署和使用jbpm系统。"JBPM3.1Help(中文).chm"可能包含了关于jbpm3的安装步骤、API使用、工作流设计等方面的中文帮助文档,这对于初学者了解jbpm3的基础操作和...

    SSH 与jbpm4.3 整合的资料以及ssh的jar包

    在整合过程中,`jbpm4.3 ssh.doc`可能包含关于如何配置SSH框架以适应jbpm4.3的详细步骤,`jbpm4.3&ssh 整合.doc`则可能进一步介绍了整合过程中的关键点和常见问题。`ssh整合需要的jar包目录.doc`应该列出了整合SSH与...

    SSH jbpm4 ExtJs 完整配置,完整实例

    7. .myeclipse和.src:.myeclipse目录可能包含MyEclipse IDE特有的配置信息,src目录则是源代码的存放位置,其中可能包含了SSH、jbpm4和ExtJs的业务逻辑、控制层、视图层及持久化层的Java代码。 在实际应用中,...

    Jbpm4与SSH整合

    **JBPM4与SSH整合详解** 在企业级应用开发中,Spring(Struts2、Hibernate)集成,简称SSH,是常见的Java Web开发框架组合。它们分别负责控制层、视图层和持久层的处理,而JBPM4则是一个强大的工作流管理系统,用于...

    jbpm4.4+ssh整合

    jbpm4.4+ssh整合还需要安装插件进入到myeclipse中 将相应的jar文件放进去 就能够运行 jbpm4.4 jar ssh(strut2,hibernate3,spring3)三大框架整合的jar包 例子是 请假流程 代码中有很好的注释 便于初学者学习

Global site tag (gtag.js) - Google Analytics