zoukankan      html  css  js  c++  java
  • 工作流--JBPM流程管理

     工作流程部署好之后,可以通过核心引擎来进行流程信息的管理工作。具体实现如下:

       一、查询流程

         1、获取所有流程信息:     

    public void findAll() throws Exception{
    		List<ProcessDefinition> list=processEngine.getRepositoryService()//
    			.createProcessDefinitionQuery()//
    			//设置过滤条件
    //			.processDefinitionKey("")//
    //			.processDefinitionNameLike("")//
    			//排序
    //			.orderAsc("")//
    			//获取记录数
    //			.count()
    			//获取单一记录
    //			.uniqueResult()
    			//分页
    //			.page(arg0, arg1)
    			.list();
    		
    		for(ProcessDefinition pd:list){
    			System.out.println(//
    				"id="+pd.getId()//格式为:(key)-(version),用于唯一标识一个活动
    				+",name="+pd.getName()//流程定义的名称,jpdl.xml中根元素的name属性值
    				+",key="+pd.getKey()//流程定义的key,jpdl.xml中根元素的key属性值,默认为name值
    				+",version="+pd.getVersion()//版本号,自动生成,第一次为1,以后递增
    				+",deployId="+pd.getDeploymentId());//所属的部署对象
    			
    		}
    	}
           可以通过流程资源服务接口来调用所需要的查询信息,设置不同的过滤条件及分页等。

        

         2、获取最新的版本信息     

    public void findLatest() throws Exception{
    			List<ProcessDefinition> all=processEngine.getRepositoryService()//
    				.createProcessDefinitionQuery()//				
    				//排序
    				.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)//				
    				.list();
    			
    			//过滤所有最新的版本
    			Map<String,ProcessDefinition> map=new HashMap<String,ProcessDefinition>();
    			for(ProcessDefinition pd:all){
    				map.put(pd.getKey(), pd);
    			}
    			
    			for(ProcessDefinition pd:map.values()){
    				System.out.println(//
    					"id="+pd.getId()//格式为:(key)-(version),用于唯一标识一个活动
    					+",name="+pd.getName()//流程定义的名称,jpdl.xml中根元素的name属性值
    					+",key="+pd.getKey()//流程定义的key,jpdl.xml中根元素的key属性值,默认为name值
    					+",version="+pd.getVersion()//版本号,自动生成,第一次为1,以后递增
    					+",deployId="+pd.getDeploymentId());//所属的部署对象
    				
    			}
    		}
          该方法与查询所有流程的方法基本一致,不一样的地方就是需要对查到的数据再进行处理,筛选出版本为最新的记录。借助Map集合的特点,将版本号依次放入map集合,最后一次放入的会覆盖之前的信息,故可得到最新的版本信息。


       二、删除流程

         删除流程的方法主要有两种,一种是deleteDeployment,它存在一个缺点是删除流程后,其相关的执行信息不回删除,这样就造成查询时可能出错。第二种是deleteDeploymentCascade,在删除流程的同时,将其相关的执行信息一并删除。下面主要以第二种方法进行介绍    

            public void deleteById() throws Exception{
    		String deploymentId="90001";
    		//删除指定的部署对象(流程定义),如果有相关的执行信息,会被同时删除
    		processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
    		
    	}

        三、查看流程图     

            public void getImageResource() throws Exception{
    		String deploymentId="20001";
    		String resourceName="helloworld/helloworld.png";		
    				
    		//获取指定部署对象中的指定资源的内容
    		InputStream in =processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
    		//保存到f盘
    		OutputStream out=new FileOutputStream("F:/OA/process.png");
    		for(int b=-1;(b=in.read()) !=-1;){
    			out.write(b);
    		}
    		in.close();
    		out.close();
    	}

        通过对流程的设计、定义部署及部署管理的操作,首先是知道了其中的一些表的作用,以及在流程部署过程中的一些流转。接下来就要开始对每个任务在执行过程的一些操作进行深入的研究。
        

        

  • 相关阅读:
    python基础----装饰器
    python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
    python基础----文件处理
    python基础
    django时间的时区问题
    django-admin详细设置
    Django框架-模板系统
    Django框架--路由分配系统
    jQuery教程
    django博客项目11
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253642.html
Copyright © 2011-2022 走看看