工作流--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();
	}

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

    

原文地址:https://www.cnblogs.com/victor-grace/p/7253642.html