zoukankan      html  css  js  c++  java
  • 工作流笔记第二天_流程定义的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、部署流程定义的三种方法

    public class ProcessDefinition {
    // 获得工作流引擎对象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

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

    /* 部署流程定义(从zip中部署流程定义) */
    @Test
    public void deloymentProcessDefinitionFromZip() {
    // 根据反射获取zip文件转换成对应的流
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloWord.zip");
    // 创建流对象
    ZipInputStream zipInputStream = new ZipInputStream(in);
    // 部署对象
    Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
    .createDeployment()// 创建部署对象
    .name("helloWord入门程序")// 添加部署名称
    .addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
    .deploy();// 完成部署;
    System.out.println("部署id:" + deploy.getId());
    System.out.println("部署名称:" + deploy.getName());
    }

    /* 部署流程定义(从inputStream中部署流程定义) */
    @Test
    public void deloymentProcessDefinitionFromZip() {
    // 根据反射获取zip文件转换成对应的流
    InputStream inputStreambpmn = this.getClass().getResourceAsStream("/diagrams/processVariables.bpmn");
    InputStream inputStreampng = this.getClass().getResourceAsStream("/diagrams/processVariables.png");

    // 部署对象
    Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
    .createDeployment()// 创建部署对象
    .name("流程变量")// 添加部署名称
    .addInputStream("processVariables.bpmn", inputStreambpmn)// 使用资源文件名称(要求:与资源文件名称要一致)和输入流完成部署
    .addInputStream("processVariables.png", inputStreampng).deploy();// 完成部署;
    System.out.println("部署id:" + deploy.getId());
    System.out.println("部署名称:" + deploy.getName());
    }

    }

    2、查询流程定义

    // 获得工作流引擎对象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /* 查询流程定义 */
    @Test
    public void queryProcessDefinitionp() {
    List<org.activiti.engine.repository.ProcessDefinition> list = processEngine.getRepositoryService()// 与流程定义相关的service
    .createProcessDefinitionQuery()// 创建一个流程定义的查询对象
    /* 指定查询条件也就相当于where */
    // .deploymentId(deploymentId);//根据部署对象id查询
    // .processDefinitionId(processDefinitionId)//根据流程定义id查询
    // .processDefinitionKey(processDefinitionKey)//根据流程定义key查询
    // .processDefinitionName(processDefinitionName)//根据流程定义名称name查询
    // .processDefinitionNameLike(processDefinitionNameLike)//根据流程定义名称name模糊查询

    /* 指定排序方式 */
    .orderByProcessDefinitionId().asc()// 按照流程定义id的升序排序
    // .orderByProcessDefinitionKey()// 按照流程定义key排序
    // .orderByProcessDefinitionName()// 按照流程定义name排序
    // .orderByProcessDefinitionVersion()// 按照流程定义的版本排序

    /* 返回的结果集 */
    .list();// 返回一个集合列表,封装流程定义
    // .singleResult()//返回唯一结果
    // .count()//返回个数
    // .listPage(firstResult, maxResults)//分页查询
    if (list != null && list.size() > 0) {
    for (org.activiti.engine.repository.ProcessDefinition processDefinition : list) {
    System.out.println("流程定义id:" + processDefinition.getId());// 流程定义的key+版本+随机生成数
    System.out.println("流程定义的名称:" + processDefinition.getName());// 流程定义的bpmn文件中的name属性值
    System.out.println("流程定义的key:" + processDefinition.getKey());// 流程定义的bpmn文件中的id属性值
    System.out.println("流程定义版本:" + processDefinition.getVersion());// 当流程定义的key值相同的情况下版本升级,默认是1
    System.out.println("资源名称bpm文件:" + processDefinition.getResourceName());
    System.out.println("资源名称png文件:" + processDefinition.getDiagramResourceName());
    System.out.println("部署对象id:" + processDefinition.getDeploymentId());
    System.out.println("-------------------------------------------------------------");
    }
    }

    3、删除流程定义

    /* 删除流程定义 */
    @Test
    public void deleteProcessDefinitionp() {
    String deploymentId = "1";
    /*
    * 不带级联的删除 只能删除没有启动的流程,如果流程启动就会抛出异常
    */
    /*
    * processEngine.getRepositoryService()// 与流程定义相关的service
    * .deleteDeployment(deploymentId); System.out.println("删除成功!");
    */

    /*
    * 级联删除 不管流程是否启动,都能删除
    */
    processEngine.getRepositoryService()// 与流程定义相关的service
    .deleteDeployment(deploymentId, true);
    System.out.println("删除成功!");
    }

    4、查看流程图

    /* 查看流程图 */
    @Test
    public void viewPic() throws IOException {
    // 将生成的图片放到指定的文件下
    String deploymentId = "401";
    String resourceName = "";
    // 获取图片资源名称
    List<String> list = processEngine.getRepositoryService()// 与流程定义相关的service
    .getDeploymentResourceNames(deploymentId);
    if (list != null && list.size() > 0) {
    for (String name : list) {
    if (name.indexOf(".png") > 0) {// 说明存在png文件
    resourceName = name;
    }
    }
    }
    // 获取图片的输入流
    InputStream resourceAsStream = processEngine.getRepositoryService()// 与流程定义相关的service
    .getResourceAsStream(deploymentId, resourceName);
    File file = new File("D:\就业班\工作流\测试\" + resourceAsStream);
    FileUtils.copyInputStreamToFile(resourceAsStream, file);
    System.out.println("生成成功!" + file);
    }

    5、查询最新版本的流程定义

    /* 附加功能:查询最新版本的流程定义 */
    @Test
    public void queryLastVersionProcessDefinition() {
    List<org.activiti.engine.repository.ProcessDefinition> list = processEngine.getRepositoryService()// 与流程定义相关的service
    .createProcessDefinitionQuery()// 创建流程定义查询对象
    .orderByProcessDefinitionVersion().asc()// 按照流程定义版本升序排序
    .list();

    // key相同,后面的值就会覆盖前面的值,最后的就是最新版本的 . 会有多个不同的key值每个key对应会有多个版本
    Map<String, org.activiti.engine.repository.ProcessDefinition> map = new LinkedHashMap<>();
    if (list != null && list.size() > 0) {
    for (org.activiti.engine.repository.ProcessDefinition pd : list) {
    map.put(pd.getKey(), pd);
    }
    }
    List<org.activiti.engine.repository.ProcessDefinition> pdList = new ArrayList<>(map.values());
    if (pdList != null && pdList.size() > 0) {
    for (org.activiti.engine.repository.ProcessDefinition processDefinition : pdList) {
    System.out.println("流程定义id:" + processDefinition.getId());// 流程定义的key+版本+随机生成数
    System.out.println("流程定义的名称:" + processDefinition.getName());// 流程定义的bpmn文件中的name属性值
    System.out.println("流程定义的key:" + processDefinition.getKey());// 流程定义的bpmn文件中的id属性值
    System.out.println("流程定义版本:" + processDefinition.getVersion());// 当流程定义的key值相同的情况下版本升级,默认是1
    System.out.println("资源名称bpm文件:" + processDefinition.getResourceName());
    System.out.println("资源名称png文件:" + processDefinition.getDiagramResourceName());
    System.out.println("部署对象id:" + processDefinition.getDeploymentId());
    System.out.println("-------------------------------------------------------------");
    }
    }
    }

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

    /* 附加功能:删除流程定义(删除key相同的所有不同版本的流程定义) */
    @Test
    public void deleteProcessDefinition() {
    // 流程定义的key
    String processDefinitionKey = "helloWord";
    List<org.activiti.engine.repository.ProcessDefinition> list = processEngine.getRepositoryService()// 与流程定义相关的service
    .createProcessDefinitionQuery()// 创建流程定义查询对象
    .processDefinitionKey(processDefinitionKey)// 根据流程定义的key值查询
    .list();
    // 遍历,获取每个流程定义的部署id
    if (list != null && list.size() > 0) {
    for (org.activiti.engine.repository.ProcessDefinition pd : list) {
    // 根据流程部署id删除流程
    processEngine.getRepositoryService()// 与流程定义相关的service
    .deleteDeployment(pd.getDeploymentId(), true);
    }
    }
    }

  • 相关阅读:
    mass Framework event模块 v9
    关于开源的网络爬虫/网络蜘蛛larbin结构分析
    socketaddr和socketaddr_in的区别于联系
    C语言中.h和.c文件解析
    [原]变参函数原理详解
    fopen和open有什么区别?
    C语言的那些小秘密之变参函数的实现
    c语言中逗号运算符和逗号表达式
    关于REST API设计的一些小经验
    Linux信号说明列表
  • 原文地址:https://www.cnblogs.com/smile-nn/p/7376241.html
Copyright © 2011-2022 走看看