查看流程定义

查看流程定义

    /**
     * 查看流程定义
     */
    @Test
    public void queryProcessDefinition(){
    	List list = processEngine.getRepositoryService()
    		.createProcessDefinitionQuery() //  创建一个流程定义的查询
    		/** 指定查询条件 */
    		//.deploymentId("") // 使用部署对象id查询
    		//.processDefinitionId("") // 使用流程定义id查询
    		//.processDefinitionKey("") // 使用流程定义的key查询
    		//.processDefinitionResourceNameLike("请假申请") // 使用流程定义的名称模糊查询
    		//..........
    		
    		/** 排序 */
    		//.orderByProcessDefinitionVersion().asc() // 使用版本的升序排列
    		//.orderByProcessDefinitionName().desc() // 使用流程定义的名称降序排列
    		//..........
    		
    		.list(); // 返回一个结果集
    		//.singleResult(); // 返回唯一的结果集
    		//.count() // 返回结果集数量
    		//.listPage(firstResult, maxResults) // 分页查询    		
    	
    	if(list != null && list.size() > 0){}
    		for(ProcessDefinition de:list){
    			System.out.println("============== 流程定义查询 begin ===============");
    			System.out.println("流程定义ID:"+de.getId());		// 流程定义的key+版本号+随机生成数
    			System.out.println("流程定义名称:"+de.getName());	// 对应test1.bpmn 文件中的name
    			System.out.println("流程定义的key:"+de.getKey());	//  对应test1.bpmn 文件中的key
    			System.out.println("流程定义的版本:"+de.getVersion()); // 当流程定义的key相同的情况下,版本升级,默认1
    			System.out.println("资源文件bpmn名称:"+de.getResourceName());
    			System.out.println("资源文件png名称:"+de.getDiagramResourceName());
    			System.out.println("部署对象ID:"+de.getDeploymentId());
    			System.out.println("============== 流程定义查询 end   ===============");
    		}
    }

运行单元测试,输出结果入下:
查看流程定义_第1张图片

可以看到流程定义的key值相同的情况下,版本是从1开始逐次升级的
流程定义的Id是【key:版本:生成ID】


查看最新版本的流程定义

    /**
     * 查询最新版本的流程定义
     */
    @Test
    public void queryBestNewProcessDefinition() {
    	List list = processEngine.getRepositoryService()
    		.createProcessDefinitionQuery()
    		.orderByProcessDefinitionVersion().asc()
    		.list();
    	/**
    	 * Map
    	 * map集合的key = 流程定义的key
    	 * map集合的value = 流程定义对象
    	 * map集合的特点,当map集合key相同的情况下,后一次的值将替换前一次的值
    	 */
    	Map map = new LinkedHashMap();
    	if(list != null && list.size() > 0){
        	for(ProcessDefinition d:list){	
        		map.put(d.getKey(), d);
        	}
    	}
    	
    	List pdList = new ArrayList(map.values());
    	if(pdList != null && pdList.size() > 0){
        	for(ProcessDefinition d:pdList){	
        		System.out.println("============== 获取最新的流程定义 begin ===============");
    			System.out.println("流程定义ID:"+d.getId());		// 流程定义的key+版本号+随机生成数
    			System.out.println("流程定义名称:"+d.getName());	// 对应test1.bpmn 文件中的name
    			System.out.println("流程定义的key:"+d.getKey());	//  对应test1.bpmn 文件中的key
    			System.out.println("流程定义的版本:"+d.getVersion()); // 当流程定义的key相同的情况下,版本升级,默认1
    			System.out.println("资源文件bpmn名称:"+d.getResourceName());
    			System.out.println("资源文件png名称:"+d.getDiagramResourceName());
    			System.out.println("部署对象ID:"+d.getDeploymentId());
    			System.out.println("============== 获取最新的流程定义   ===============");
        	}
    	}
    }

查看流程定义文档的资源,查看流程图文件

    /**
     * 查看流程图文件
     */
    @Test
    public void findImage() throws IOException{
    	String deploymentId = "15002";
    	// 获取图片资源名称
    	List names = processEngine.getRepositoryService()
    			.getDeploymentResourceNames(deploymentId);
    	
    	// 定义图片资源名称
    	String imgName = null;
    	for(String name:names){
    		System.out.println("图片名:"+name);
    		if(name.indexOf(".png")>=0){
    			imgName = name;
    		}
    	}
    	
    	System.out.println("imgName:"+imgName);
    	// 通过部署ID和文件名得到文件的输入流
		InputStream in = processEngine.getRepositoryService()
				.getResourceAsStream(deploymentId, imgName);

		File f = new File("D:/"+imgName);
		FileUtils.copyInputStreamToFile(in,f);  
    	System.out.println("=============图片输出成功=============");
    }

运行单元测试:
查看流程定义_第2张图片

现在我们可以在D盘看到一个名称为diagrams的文件夹了,打开就可以看到生成的流程图文件了
查看流程定义_第3张图片


总结

  1. 流程定义和部署对象相关的Service都是RepositoryService。

  2. 创建流程定义查询对象,可以在ProcessDefinitionQuery上设置查询的相关参数

  3. 调用ProcessDefinitionQuery对象的list方法,执行查询,获得符合条件的流程定义列表

  4. 由运行结果可以看出:Key和Name的值为:bpmn文件process节点的id和name的属性值

  5. key属性被用来区别不同的流程定义。

  6. 带有特定key的流程定义第一次部署时,version为1。之后每次部署都会在当前最高版本号上加1

  7. Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个自动生成的唯一的数字

  8. 重复部署一次,deploymentId的值以一定的形式变化,规则act_ge_property表生成

你可能感兴趣的:(Activiti,工作流)