本节主要讲流程定义查询、查询某个流程设计图片并保存到本地中、查询最新版本的流程定义集合、删除所有key相同的定义

先创建一个java类

package com.java.procdef;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

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

public class ProcessDefinitionTest {

  //获取默认流程引擎实例,会自动读取avtiviti.cfg.xml文件

private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();

//流程定义查询,就是查某个模板被用了多少次,返回流程定义集合对应表act_re_procdef
@Test
public void list() {
  String processDefinition="myFirstProcess";
    List<ProcessDefinition> pdList= processEngine.getRepositoryService()
    .createProcessDefinitionQuery() //创建流程定义查询
    .processDefinitionKey(processDefinition) //通过key查询,返回的是集合
    .list();
  for (ProcessDefinition pd : pdList) {
    System.out.println("id"+pd.getId());
    System.out.println("name"+pd.getName());
    System.out.println("key"+pd.getKey());
    System.out.println("version"+pd.getVersion());
    System.out.println("====");

   }

  }

//通过流程定义id查询某个流程定义,就是查具体的某一个模板的某一个流程
@Test
public void getById() {
  String processDefinitionId = "myFirstProcess:1:4";
  ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery() // 创建流程定义查询
    .processDefinitionId(processDefinitionId).singleResult(); //
    System.out.println("id"+pd.getId());
    System.out.println("name"+pd.getName());
    System.out.println("key"+pd.getKey());
    System.out.println("version"+pd.getVersion());
    System.out.println("====");

  }
  

/**
* 根据流程部署id和图片名字查询。查询某个流程定义的流程设计图片;并保存到本地中
* @throws IOException
*/
@Test
public void getImageById() throws IOException {
  InputStream inputStream = processEngine.getRepositoryService()
    .getResourceAsStream("10001", "diagrams/HelloWord.png"); //根据流程部署id和资源名称

  //获得输入流,这个是apache提供的工具类
  FileUtils.copyInputStreamToFile(inputStream, new File("E:/helloWord.png"));
}

/**
* 查询最新版本的流程定义集合
*/
@Test
public void selectLastVersion() {

  List<ProcessDefinition> listAll= processEngine.getRepositoryService()
    .createProcessDefinitionQuery() //创建流程定义查询
    .orderByProcessDefinitionVersion().asc() //根据流程定义版本升序
    .list();

  //定义有序的map,相同的key,假如添加map的值后者的值会覆盖前面相同key的值,map特点是保证key唯一
  Map<String,ProcessDefinition> map=new LinkedHashMap<String,ProcessDefinition>();
  //遍历集合,根据key来覆盖前面的值,来保证最新的key覆盖老的key
  for (ProcessDefinition pd : listAll) {
    map.put(pd.getKey(), pd);

  }

  List<ProcessDefinition> pdList=new LinkedList<ProcessDefinition>(map.values());
    for (ProcessDefinition pd : pdList) {
      System.out.println("id"+pd.getId());
      System.out.println("name"+pd.getName());
      System.out.println("key"+pd.getKey());
      System.out.println("version"+pd.getVersion());
    System.out.println("====");

    }

  }

/**
* 删除所有key相同的定义,activiti提供的接口支持级联删除
*
*/
@Test
public void deleteByKey() {
  String processDefinitionKy="HelloWorld2";
  List<ProcessDefinition> pdList= processEngine.getRepositoryService()
    .createProcessDefinitionQuery() //创建流程定义查询
    .processDefinitionKey(processDefinitionKy) //根据流程定义版本升序
    .list();

  for (ProcessDefinition pd : pdList) {
    processEngine.getRepositoryService()
    .deleteDeployment(pd.getDeploymentId(),true);
  }
}

}

六、activiti工作流-流程定义查询的更多相关文章

  1. 深入了解Activiti工作流流程定义

    深入了解Activiti工作流流程定义 2016-03-27| 发布: | 浏览: 2363 |保存PDF 部署流程定义 部署流程定义的流程: 1. 先获取流程引擎对象:在创建时会自动加载 class ...

  2. (四)Activiti之流程定义部署之ZIP方式和流程定义查询

    一.流程定义部署之ZIP方式 上一章节我们使用classpath的方式加载流程定义文件,这里我们使用ZIP的方式. 1.1 用activiti插件生成bpmn和png图片之后,压缩到一个zip格式的压 ...

  3. Activiti 删除流程定义

    package com.mycom.processDefinition; import java.io.InputStream; import java.util.List; import java. ...

  4. activiti部署流程定义时出错:INSERT INTO ACT_GE_BYTEARRAY,修改数据库编码

    activiti部署流程定义时出错 // 部署流程定义 Deployment deployment = deploymentBuilder.deploy(); 错误信息:(有乱码的...没留下截图.. ...

  5. Activiti工作流的定义部署和执行

        工作流引擎 个人觉得直接理解工作流引擎概念有点难度,我们可以先通过了解工作流引擎的职责再反过来理解工作流引擎,工作流引擎一般都做两件事情: 1.定义流程,也就是给我们提供某种规范来定义规则,以 ...

  6. activiti--5 -----------------Activiti 工作流 流程各个步骤所涉及到的表

    ACT_RE_*: 'RE'表示repository. 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等). ACT_RU_*: 'RU'表示runtime. 这些运行时的表,包含流程实例 ...

  7. Activiti 部署流程定义及相关的表(classpath部署、zip部署)

    package com.mycom.processDefinition; import org.activiti.engine.ProcessEngine; import org.activiti.e ...

  8. 多数据库下activiti的流程定义缓存问题

    我们使用activiti(5.14版本号)作为流程引擎,今天在产品中发现一个问题,某流程的审批记录中, 活动实例表中记录的活动名称(ACT_HI_ACTINST表的ACT_NAME)居然是该流程中不存 ...

  9. 三、activiti工作流-流程设计工具

    首先在diagrams下面新建一个文件夹 然后在这个文件夹下new一个Activiti Diagram new好后出现bpmn文件, 可以通过右键以xml方式打开bpmn文件查看源码 双击打开文件然后 ...

随机推荐

  1. CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 转载

    CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 2016年09月01日 13:56:30 疯子19911109 阅读数:4823 标签:  ...

  2. Curl测试socks5 or http 代理命令

    测试socks5命令:curl --socks5 125.119.175.48:8909 http://example.com/ 测试http命令: curl --connect-timeout 2 ...

  3. CentOSmini安装gcc8.2

    一. 如果遇到类似问题: configure: error: in `/usr/local/src/gcc-8.2.0/temp': configure: error: no acceptable C ...

  4. nova-api nova-compute 启动服务的时候有的没有加配置文件有的加了

    nova/nova/cmd/api.pyfrom nova import config def main(): config.parse_args(sys.argv) logging.setup(CO ...

  5. Java 字符编码(三)Reader 中的编解码

    Java 字符编码(三)Reader 中的编解码 我们知道 BufferedReader 可以将字节流转化为字符流,那它是如何编解码的呢? try (BufferedReader reader = n ...

  6. 图解HTTP系列

    第一章 第二章 第三章 第四章 第五章 第六章 第七章 第九章 第十章

  7. Python之路系列笔记

    备注:本套笔记内容来源于互联网,只做学习使用,如有侵权请联系本笔记作者. 资料内容 Python之路(一)——Python 初识 Python之路(二)——基础语法 Python之路(三)——函数 P ...

  8. Linux 解压/压缩xxx.zip格式(unZip Zip的安装和使用)

    Linux系统没有自带的压缩解压工具:需要我们自己安装:当压缩包为.zip格式时,需要安装zip包 1.apt-get安装: apt-get install zip 2.yum安装: yum inst ...

  9. 缓存为王-varnish

    2.varnish的软件清单 [root@centos69 ~]# rpm -ql varnish /etc/logrotate.d/varnish /etc/rc.d/init.d/varnish ...

  10. git忽视修改的文件

    对于tracked文件来说,使用.gitignore是不行的.但是git提供了新的方法. 使用命令 git update-index --assume-unchanged <files>, ...