`
q445862108
  • 浏览: 82939 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

JBPM工作流

    博客分类:
  • java
阅读更多

接口
ProcessEngine			工作流引擎   可以通过spring和 Configuration.getProcessEngine();
ExecutionService		执行				
ProcessInstance			流程实例			
ProcessDefinition		流程定义
TaskService			任务
IdentityService			自动增长
HistoryService			历史记录
ManagementService		管理
RepositoryService		仓库



方法:
1.ProcessEngine      
	processEngine.setAuthenticatedUserId(String );
	processEngine.setHibernateSession(Object);
	processEngine.setJdbcConnection(Connection);

	Object get(String);
	ExecutionService getExecutionService();
	HistoryService	getHistoryService();
	IdentityService getIdentityService();
	ManagementService getManagementService();
	RepositoryService getRepositoryService();
	TaskService getTaskService();



1.查询流程实例:new Instance
List<ProcessInstance>  instances = executionService.createProcessInstanceQuery().list();

2.查询流程进度
	1)得到当前流程中相匹配的活动 (可以得到活动的长高宽..)
	<%String id = request.getParameter("id");
	ProcessEngine processEngine = Configuration.getProcessEngine();
	RepositoryService repositoryService = processEngine.getRepositoryService();
	ExecutionService executionService = processEngine.getExecutionService();
	ProcessInstance processInstance = executionService.findProcessInstanceById(id);
	Set<String> activityNames = processInstance.findActiveActivityNames();
	ActivityCoordinates ac = repositoryService.getActivityCoordinates(processInstance.getProcessDefinitionId(),activityNames.iterator().next());%>
	<div style="position:absolute;border:1px solid red;left:<%=ac.getX()%>px;top:<%=ac.getY()%>px;width:<%=ac.getWidth()%>px;height:<%=ac.getHeight()%>px;"></div>

	2)生成图片
	<img src="Definition_definitionImage.action?id=<%=id %>" style="position:absolute;left:0px;top:0px;" align="middle">
	    	
    	RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();    	
    	ExecutionService executionService = this.getProcessEngine().getExecutionService();    	
    	String id = this.getRequest().getParameter("id");    	
    	ProcessInstance processInstance = executionService.findProcessInstanceById(id);    	
    	String processDefinitionId = processInstance .getProcessDefinitionId();
    	 // processDefinitionId 方法表示去 JBPM4_DEPLOYPROP 中按 processDefinitionId和 STRINGVAL_ 字段去找 DEPLOYMENT
    	 // 简单说就是通过 流程部署的小项id 去找 流程对象
    	ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
			.processDefinitionId(processDefinitionId).uniqueResult();
    	System.out.println(processDefinition.getImageResourceName()+"-----"+processDefinition.getDeploymentId());    	
    	// 图片输入流  
    	InputStream inputStream = null;  
    	// 如果是上传的是 xml 文件 , processDefinition.getImageResourceName() 就会是null .
    	if(processDefinition.getImageResourceName()==null){
    		String did = processDefinition.getDeploymentId();
    		  DefinitionImage definitionImage = this.getJbpmService().findImageByDefinitionId(did);  //自己写的Service不是JBPM的API
    		  if(definitionImage!=null){
    			  //  通过 这个 xml 的 流程id 找到它在数据库 definitionImage表中的记录 ,中间也有他的 图片名称 
    			  // 从而构造出 inputStream 对象 
    			  String uploadRoot = super.getRequest().getRealPath("/upload/jpdl/"+definitionImage.getImageName());
    			 try {
					inputStream = new FileInputStream(uploadRoot);
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		  }
    		
    	}else{
    	    // 从数据库读到的输入流 . 
        	inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),processDefinition.getImageResourceName());
    	}
    	byte[] b = new byte[1024];
    	int len = -1;
    	try {
			ServletOutputStream sos = this.getResponse().getOutputStream();
			while ((len = inputStream.read(b, 0, 1024)) != -1) {
				sos.write(b, 0, len);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

3.查询流程定义 (相当于Class,流程实例相当于new 的类)
List<ProcessDefinition> definitionList =  this.getProcessEngine().getRepositoryService().createProcessDefinitionQuery().list();

4.开启流程,已经有动态表单了。
				String id=reuqest.getParameter("id");  //得到流程定义ID
				// 得到当前用户 
				UserInfo userInfo = super.getLoginUser();
				//为了方便测试 , 先写死 
				Map<String, Object> map = new HashMap<String, Object>();
				map.put(Definition_Action.USER_INFO, userInfo.getUserId());
				// 为什么这里不能有多个参数
			 	map.put(Definition_Action.FORM_ID, formId);  // form 表单 id 
				// 得到专门操作流程实例的 执行对象 
				System.out.println(map);
				ExecutionService executionService = this.getProcessEngine()
						.getExecutionService();
				
				// 开启实例  ,  ProcessInstance 对象好像对应的就是 ExecutionService 的表  
				ProcessInstance pi = executionService.startProcessInstanceById(id,map);

5.上传流程定义
	/*
	 * 上传方法 (non-Javadoc) , 方法名写错了 , 应该是 uploadDefinition 
	 * 难点
	 * 1. 上传的 zip 格式就很好处理
	 * 2. 上传的是 xml , 要复杂一点 , 因为 xml 文件是不带 png 流程图的 , 这样的话就实现不了流程跟踪了 , 
	  * 所有要去网上找了个 根据  xml 生成流程图 png 的工具 (这个方法中没实现 ) ,
	  * 3.  把 xml的 流程id 和 生成的流程图名写到数据库中,当然前提是,把 xml要上传到 tomcat 先. 
	*/
	File src = this.getUpload();
    	// 得到  "知识库" service 
    	RepositoryService rService = this.getProcessEngine().getRepositoryService(); 
    	
    	String fileName = this.getUploadFileName();
    	String ext = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
    	
    	if(ext.equals("zip")){
	    	try {
				ZipInputStream zis = new ZipInputStream(new FileInputStream(src));
				rService.createDeployment().addResourcesFromZipInputStream(zis)
						.deploy();
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
    	}else if(ext.equals("xml")){
		//如果上传成功后就要放到自己的表中保存起来。
		//流程定义对象 id 
		String definitionId = rService.createDeployment().addResourceFromInputStream(this.getUploadFileName(),new FileInputStream(src)).deploy();
	}

6.删除流程定义
	RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();
	//删除要流程部署ID
	repositoryService.deleteDeploymentCascade("depolymentId");

7.查询我的任务
	TaskService taskService = this.getProcessEngine().getTaskService();
	//得到用户任务 
	List<Task> taskList = taskService.findPersonalTasks(userInfo.getUserId()); 
	//SQL:select * from JBPM4_TASK where assignee=?; 

	// 得到任务变量 formId   ?? var这里是不是在上面(开启流程)已经定义好了的。
        Object formId = taskService.getVariable(task.getId(), Definition_Action.FORM_ID);
分享到:
评论
1 楼 BigBird2012 2011-03-09  
你好,你能不能将你的源码给我发一份呢,我参考一下,谢谢!
290167875@qq.com

相关推荐

    jbpm工作流整合

    jbpm工作流整合是一个关键的主题,它涉及到企业级业务流程管理(BPM)系统的实施与集成。jbpm是一个开源的工作流管理系统,它提供了一套全面的工具和框架,用于设计、执行、监控和优化业务流程。这个压缩包可能包含...

    jbpm工作流引擎总结文档

    jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。

    jbpm工作流 基础视频

    jbpm工作流是一款开源的工作流程管理系统,主要用于设计、执行和管理业务流程。它结合了Java技术和BPM(Business Process Management)理念,为开发者提供了一套强大的工具,使得企业能够更有效地自动化和优化业务...

    JBPM工作流全套学习资料

    【JBPM工作流全套学习资料】是一份详尽的学习资源,涵盖了JBPM工作流系统的基础到高级知识。JBPM(Java Business Process Management)是开源的企业级工作流管理系统,它允许开发者设计、部署和执行业务流程。这个...

    jBPM工作流详解

    **jBPM工作流详解** jBPM,全称Java Business Process Management,是Red Hat公司开发的一款开源的工作流管理系统,它提供了对业务流程的建模、执行和监控能力。jBPM不仅支持传统的工作流标准,如BPMN 2.0,还集成...

    JBPM工作流引擎内核设计思想及构架笔记分享

    JBPM 工作流引擎内核设计思想及构架笔记分享 上文提到,工作流引擎内核是一种微内核的流程引擎架构,它只包含最基本的对象和服务,以及用于解决流程运行问题的调度机制和执行机制。引擎内核的设计思想是围绕着如何...

    jbpm工作流简单实例

    **jbpm工作流简介** jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。jbpm不仅支持BPMN(Business Process Model and Notation)...

    jbpm工作流引擎介绍

    在`jbpm工作流引擎介绍.ppt`文件中,可能包含了对这些步骤的详细图解,展示了每个步骤如何在jbpm中建模,以及流程实例在不同阶段的变化。此外,还可能涵盖了如何配置工作流规则、如何定义和分配任务,以及如何使用...

    李腾飞JBPM工作流引擎代码test01到test04

    【李腾飞JBPM工作流引擎代码test01到test04】是一系列关于使用JBPM工作流引擎进行程序开发的示例代码。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行和管理业务流程...

    工作流程JBPM工作流管理

    【工作流程JBPM工作流管理】是企业信息化建设中至关重要的一环,它涉及到组织内部的任务自动化、业务流程优化以及跨部门协作效率的提升。JBPM(JBoss Business Process Management)是Red Hat公司推出的一款开源的...

    jbpm工作流详解

    【jbpm工作流详解】 工作流(Workflow)是业务过程在计算机环境下的自动化体现,旨在使多参与者间按照预定义规则传递文档、信息或任务,以达成特定的业务目标。工作流管理系统(WfMS)是实现这一目标的关键,它负责...

    企业OA 完整的jbpm工作流实例

    在这个名为"企业OA 完整的jbpm工作流实例"的项目中,开发者使用了Java SSH框架来构建了一个集成jbpm的工作流系统,特别适合初学者了解和学习工作流的实现。 SSH框架是Struts、Spring、Hibernate三个开源项目的首...

    JBPM工作流实战_流程定义文件的上传处理视频 03

    "JBPM工作流实战_流程定义文件的上传处理视频 03"这一主题主要关注如何在实际操作中处理JBPM流程定义文件的上传,这在构建业务流程自动化系统时是非常关键的步骤。 首先,流程定义文件是JBPM工作流的核心组成部分,...

    关于jbpm工作流的一些常用的问题

    jbpm工作流是一种开源的工作流管理系统,由JBoss组织开发,用于帮助企业自动化业务流程。jbpm提供了丰富的功能,包括流程定义、执行、监控和集成,适用于各种业务场景,如人力资源管理、采购流程、客户服务等。 在...

    jbpm工作流

    jbpm工作流框架 BPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,使用它要...

    JBPM工作流开发指南v10-20070706.doc

    JBPM工作流开发指南v10-20070706.doc 是一份详细的学习文档,主要针对那些想要深入理解并使用JBPM工作流引擎的开发者。JBPM(Java Business Process Management)是一个开源的工作流管理系统,它允许开发者设计、...

    一个JBPM工作流例子,JBPM

    **JBPM工作流详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。在本示例中,我们将深入探讨如何利用JBPM实现销售批复这一具体...

    jBPM工作流应用开发指南

    《jBPM工作流应用开发指南》是一本面向初学者的文档,旨在帮助开发者快速掌握jBPM工作流系统的开发技巧。jBMP,全称Java Business Process Management,是开源组织JBoss提供的一款用于业务流程管理(BPM)的框架,它...

Global site tag (gtag.js) - Google Analytics