Activiti学习笔记五 流程定义的管理(二)

来源:互联网 发布:mac迅雷一直提示信任 编辑:程序博客网 时间:2024/04/30 11:11

5.获取流程定义文档的资源(查看流程图附件)

/**     * 功能: 获取流程图.<br/>     * date: 2014年12月16日 下午4:22:30 <br/>     *      * @author xzzhao@wisdombud.com     * @throws IOException     */    @Test    public void viewPicture() throws IOException {        // 部署Id        String deploymentId = "1001";        // 获取图片资源名称        List<String> list = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);        // 定义图片资源名称        String resourceName = "";        if (null != list && list.size() > 0) {            for (String name : list) {                if (name.indexOf(".png") >= 0) {                    resourceName = name;                }            }        }        // 获取图片的输入流        InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);        // 将输入流的图片写到D盘        FileUtils.copyInputStreamToFile(in, new File("D:/" + resourceName));    }


说明:

        1)deploymentId为流程部署ID

        2)resourceName为act_ge_bytearray表中NAME_列的值

        3)使用repositoryService的getDeploymentResourceNames方法可以获取指定部署下得所有文件的名称

        4)使用repositoryService的getResourceAsStream方法传入部署ID和资源图片名称可以获取部署下指定名称文件的输入流

        5)最后的有关IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程流程到文件的拷贝,将资源文件以流的形式输出到指定文件夹下

 

6.查询最新版本的流程定义

/**     * 功能: 查询最新版本的流程定义.<br/>     * date: 2014年12月16日 下午4:56:04 <br/>     *      * @author xzzhao@wisdombud.com     */    @Test    public void queryUltimatelyVersionProcessDefinition() {        List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery()                .orderByProcessDefinitionVersion().asc()// 使用流程定义版本升序排列                .list();        // 当map集合key相同时,后一次的值将替换原来的值        Map<String, ProcessDefinition> map = new LinkedHashMap<>();        if (null != list && list.size() > 0) {            for (ProcessDefinition pd : list) {                map.put(pd.getKey(), pd);            }        }        List<ProcessDefinition> pdList = new ArrayList<>(map.values());        if (null != pdList && pdList.size() > 0) {            for (ProcessDefinition pd : pdList) {                System.out.println("流程定义ID:" + pd.getId()); // key + 版本 + 随机数                System.out.println("流程定义的名称:" + pd.getName()); // 对应bpmn文件中Name属性                System.out.println("流程定义的key:" + pd.getKey()); // 对应bpmn文件中ID属性                System.out.println("流程定义的版本:" + pd.getVersion()); // 当流程定义的key值相同下,版本升级,默认是1                System.out.println("部署对象的ID:" + pd.getDeploymentId());                System.out.println("资源文件bpmn名称:" + pd.getResourceName());                System.out.println("资源文件png名称:" + pd.getDiagramResourceName());                System.out.println("############################################");            }        }    }


7.删除流程定义(key相同的所有不同版本的流程定义)

/**     * 功能: 删除流程定义(key相同的所有不同版本的流程定义).<br/>     * date: 2014年12月16日 下午5:06:10 <br/>     *      * @author xzzhao@wisdombud.com     */    @Test    public void deleteProcessDefinitionByKey() {        // 流程定义的key        String processDefinitionKey = "helloworld";        // 先根据key查询处所有版本的流程定义        List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery()                .processDefinitionKey(processDefinitionKey) // 使用流程定义的key查询                .list();        if (null != list && list.size() > 0) {            for (ProcessDefinition pd : list) {                // 获取部署Id                String deploymentId = pd.getDeploymentId();                processEngine.getRepositoryService().deleteDeployment(deploymentId, true);            }        }    }


总结:

  •  Deployment   部署对象

        1 .一次部署的多个文件的信息。对于不需要的流程可以删除和修改。

   2 .对应的表: 

                act_re_deployment :部署对象表 

                act_re_procdef    :流程定义表 

                act_ge_bytearray  :资源文件表 

                act_ge_property  :主键生成策略表

  • ProcessDefinition流程定义
        1 .解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的。

 

 

 

 

 

 

 

 

0 0
原创粉丝点击