3.流程定义的CRUD

表 _re_是仓库的简写

/itcast0711/src/main/java/cn/itcast/b_processDefinition/ProcessDefinitionTest.java

package cn.itcast.b_processDefinition;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

public class ProcessDefinitionTest {

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /**部署流程定义(从classpath)*/
    @Test
    public void deploymentProcessDefinition_classpath(){
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
                        .createDeployment()//创建一个部署对象
                        .name("流程定义")//添加部署的名称
                        .addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
                        .addClasspathResource("diagrams/helloworld.png")//从classpath的资源中加载,一次只能加载一个文件
                        .deploy();//完成部署
        System.out.println("部署ID:"+deployment.getId());//501
        System.out.println("部署名称:"+deployment.getName());//流程定义
    }

    /**部署流程定义(从zip)*/
    @Test
    public void deploymentProcessDefinition_zip(){
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");
        ZipInputStream zipInputStream = new ZipInputStream(in);
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
                        .createDeployment()//创建一个部署对象
                        .name("流程定义")//添加部署的名称
                        .addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
                        .deploy();//完成部署
        System.out.println("部署ID:"+deployment.getId());//601
        System.out.println("部署名称:"+deployment.getName());//流程定义
    }

    /**查询流程定义*/
    @Test
    public void findProcessDefinition(){
        List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
                        .createProcessDefinitionQuery()//创建一个流程定义的查询
                        /**指定查询条件,where条件*/
//                        .deploymentId(deploymentId)//使用部署对象ID查询
//                        .processDefinitionId(processDefinitionId)//使用流程定义ID查询
//                        .processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
//                        .processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询

                        /**排序*/
                        .orderByProcessDefinitionVersion().asc()//按照版本的升序排列
//                        .orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列

                        /**返回的结果集*/
                        .list();//返回一个集合列表,封装流程定义
//                        .singleResult();//返回惟一结果集
//                        .count();//返回结果集数量
//                        .listPage(firstResult, maxResults);//分页查询
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
                System.out.println("流程定义的名称:"+pd.getName());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
                System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
                System.out.println("资源名称bpmn文件:"+pd.getResourceName());
                System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                System.out.println("部署对象ID:"+pd.getDeploymentId());
                System.out.println("#########################################################");
            }
        }
    }
//    流程定义ID:helloworld:1:4
//    流程定义的名称:helloworldProcess
//    流程定义的key:helloworld
//    流程定义的版本:1
//    资源名称bpmn文件:diagrams/helloworld.bpmn
//    资源名称png文件:diagrams/helloworld.png
//    部署对象ID:1
//    #########################################################
//    流程定义ID:helloworld:2:504
//    流程定义的名称:helloworldProcess
//    流程定义的key:helloworld
//    流程定义的版本:2
//    资源名称bpmn文件:diagrams/helloworld.bpmn
//    资源名称png文件:diagrams/helloworld.png
//    部署对象ID:501
//    #########################################################
//    流程定义ID:helloworld:3:604
//    流程定义的名称:helloworldProcess
//    流程定义的key:helloworld
//    流程定义的版本:3
//    资源名称bpmn文件:helloworld.bpmn
//    资源名称png文件:helloworld.png
//    部署对象ID:601
//    #########################################################
    /**删除流程定义*/
    @Test
    public void deleteProcessDefinition(){
        String deploymentId = "601";//使用部署ID,完成删除
        /**不带级联的删除:只能删除没有启动的流程,如果流程启动,就会抛出异常 */
//        processEngine.getRepositoryService()//
//                        .deleteDeployment(deploymentId);

        /**级联删除:不管流程是否启动,都能可以删除*/
        processEngine.getRepositoryService()//
                        .deleteDeployment(deploymentId, true);
        System.out.println("删除成功!");
    }

    /**查看流程图
     * @throws IOException */
    @Test
    public void viewPic() throws IOException{
        /**将生成图片放到文件夹下*/
        String deploymentId = "501";
        //获取图片资源名称
        List<String> list = processEngine.getRepositoryService()//
                        .getDeploymentResourceNames(deploymentId);
        String resourceName = "";//定义图片资源的名称
        if(list!=null && list.size()>0){
            for(String name:list){
                if(name.indexOf(".png")>=0){
                    resourceName = name;
                }
            }
        }
        //获取图片的输入流
        InputStream in = processEngine.getRepositoryService()//
                        .getResourceAsStream(deploymentId, resourceName);
        File file = new File("F:/"+resourceName);//将图片生成到D盘的目录下
        FileUtils.copyInputStreamToFile(in, file);//将输入流的图片写到F盘下
    }

    /***附加功能:查询最新版本的流程定义*/
    @Test
    public void findLastVersionProcessDefinition(){
        List<ProcessDefinition> list = processEngine.getRepositoryService()//
                        .createProcessDefinitionQuery()//
                        .orderByProcessDefinitionVersion().asc()//使用流程定义的版本升序排列
                        .list();
        /**
         * Map<String,ProcessDefinition>
          map集合的key:流程定义的key
          map集合的value:流程定义的对象
          map集合的特点:当map集合key值相同的情况下,后一次的值将替换前一次的值
         */
        Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                map.put(pd.getKey(), pd);
            }
        }
        List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());
        if(pdList!=null && pdList.size()>0){
            for(ProcessDefinition pd:pdList){
                System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
                System.out.println("流程定义的名称:"+pd.getName());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
                System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
                System.out.println("资源名称bpmn文件:"+pd.getResourceName());
                System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                System.out.println("部署对象ID:"+pd.getDeploymentId());
                System.out.println("#########################################################");
            }
        }
    }
//    流程定义ID:helloworld:2:504
//    流程定义的名称:helloworldProcess
//    流程定义的key:helloworld
//    流程定义的版本:2
//    资源名称bpmn文件:diagrams/helloworld.bpmn
//    资源名称png文件:diagrams/helloworld.png
//    部署对象ID:501
//    #########################################################
    /**附加功能:删除流程定义(删除key相同的所有不同版本的流程定义)*/
    @Test
    public void deleteProcessDefinitionByKey(){
        //流程定义的key
        String processDefinitionKey = "helloworld";
        //先使用流程定义的key查询流程定义,查询出所有的版本
        List<ProcessDefinition> list = processEngine.getRepositoryService()//
                        .createProcessDefinitionQuery()//
                        .processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
                        .list();
        //遍历,获取每个流程定义的部署ID
        if(list!=null && list.size()>0){
            for(ProcessDefinition pd:list){
                //获取部署ID
                String deploymentId = pd.getDeploymentId();
                processEngine.getRepositoryService()//
                            .deleteDeployment(deploymentId, true);
            }
        }
    }
}

Deployment 部署对象

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

对应的表

act_re_deployment:部署对象表

act_re_procdef:流程定义表

act_ge_bytearray:资源文件表

act_ge_property:主键生成策略表

ProcessDefinition流程定义

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

时间: 2024-11-05 09:29:20

3.流程定义的CRUD的相关文章

工作流笔记第二天_流程定义的CRUD

0.流程定义的表 -- Deployment 部署对象和流程定义相关的表-- 1.一次部署的多个文件的信息,对于不需要的流程可以删除或修改select * FROM act_re_deployment; -- 部署对象表select * FROM act_re_procdef; -- 流程定义表select * FROM act_ge_bytearray; -- 资源文件表select * FROM act_ge_property; -- 主键生成策略表,下一个流程的编号 1.部署流程定义的三种

工作流学习——Activiti流程定义管理三步曲

一.前言 在上一篇文章我们通过一个小demo对Activiti进行了宏观的介绍,让大家对Activiti有了整体的认识,这篇文章我们来学习具体的流程定义管理的CRUD. 二.正文 流程定义是什么 ProcessDefinition(流程定义)就是一个流程的步骤说明,比如我们接下来要说的这个流程,申请人王三发起提交申请,李四作为部门经理进行审批,审批完成后,此申请到达下一级总经理王五,进行审批.就这么整个流程说明其实就是流程定义,不过在Activiti中整个流程定义是以helloworld.bpm

工作流学习——Activiti流程定义管理三步曲 (zhuan)

http://blog.csdn.net/zwk626542417/article/details/46602419 **************************************************************** 一.前言 在上一篇文章我们通过一个小demo对Activiti进行了宏观的介绍,让大家对Activiti有了整体的认识,这篇文章我们来学习具体的流程定义管理的CRUD. 二.正文 流程定义是什么 ProcessDefinition(流程定义)就是一个流

03-查询流程定义部署

//查询流程部署 @Test public void queryDeployment() { RepositoryService repositoryService=this.processEngine.getRepositoryService(); ProcessDefinitionQuery definitionQuery= repositoryService.createProcessDefinitionQuery(); String processDefinitionKey="purch

15-流程操作(查询和删除部署信息和流程定义信息)

效果如下: 查询部署表 部署对象Deployment也是接口,它的四个方法刚好对应着部署表act_re_deployment的四个字段 查询流程定义列表 假如这个流程图画错了,我不想使用这个流程了,把它删除掉,那就删除部署信息 删除部署信息 流程部署表act_re_deployment里面ID_为1的记录被删除了,并且流程定义表act_re_procdef里面外键DEPLOYMENT_ID_为1的记录也被删除了,因为有外键约束嘛,不可能只删除流程部署表的信息 现在看是没有问题,我来制造一个问题,

Activiti 删除流程定义

package com.mycom.processDefinition; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInputStream; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.repository.De

JBPM(六)——掌握JBPM流程定义语言

一.流程 在JPDL中process元素是每个流程定义的顶级元素,即任何流程定义都必须以如下形式开始和结束 <process> ... </process> process元素拥有的属性: 属性 类型 默认值 是否必须 描述 name 文本 无 必须 展示给用户 key 如省略,则根据name生成 标识不同流程 version 整型 从1开始 同一流程的不同版本 它下的子元素有:description.activities 二.流转控制活动 start--开始活动 state--状

框架 day57 BOS项目练习(流程定义/实例管理,bos用户角色同步activiti用户表组表)

BOS项目笔记第11天 内容: 1.提供新的json文件,修改系统菜单(加入工作流的菜单) 2.流程定义管理(查询.部署流程.查看png流程图片) 3.流程实例管理(查询.查看运行状态) 4.将bos系统中的用户数据和角色数据同步到activiti的用户表和组表 1.    提供新的json文件,修改系统菜单(加入工作流的菜单) 2.    流程定义管理 第一步:创建一个ProcessDefinitionAction,提供list方法,并注入流程引擎对象  查询 @Controller @Sco

Activiti 查询最新版本的流程定义

package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipInputSt