目录

 

前言

一、RepositoryService 是什么?

二、使用步骤

1.产生方式

2.产生DeploymentBuilder

3.部署流程

3.1代码实现

3.2生成的表数据

4.删除流程定义

5.查询流程定义

 

总结



 

前言

Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务。

 


 

一、RepositoryService 是什么?

RepositoryService 是Acitiviti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。

二、使用步骤

1.产生方式

代码如下(示例):

RepositoryService repositoryService = processEngine.getRepositoryService();

2.产生DeploymentBuilder

DeploymentBuilder:定义流程部署相关参数

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.zip.ZipInputStream;

public class ActivitiRepTest {

    RepositoryService repositoryService;

    /**
     * 默认简化方式: 启动时会默认寻找classpath下面的activiti.cfg.xml文件
     */
    @Before
    public void initConfigWithDefault() {
        //创建流程引擎对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        repositoryService = processEngine.getRepositoryService();
    }

    /**
     * 部署流程 直接加载bpmn文件和图片文件
     */
    @Test
    public void deployActivitByPath() {
        //创建部署对象
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        //加载流程的配置文件和图片
        deploymentBuilder.addClasspathResource("diagrams/test.bpmn")
                .addClasspathResource("diagrams/test.png")
                .name("部署的流程定义名称")
                .category("业务分类,可自行定义")
        ;
        deploymentBuilder.deploy();
    }

    /**
     * 部署流程  直接加载bpmn文件和流程图片的压缩文件
     */
    @Test
    public void deployActivitByFileZip() {
        //创建部署对象
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        InputStream inputStream = this.getClass().getResourceAsStream("diagrams/test.zip");
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        //加载流程的配置文件和图片
        deploymentBuilder.addZipInputStream(zipInputStream)
                .name("部署的流程定义名称")
                .category("业务分类,可自行定义")
        ;
        deploymentBuilder.deploy();
    }
}

 

3.部署流程

 

3.1代码实现

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.zip.ZipInputStream;

public class ActivitiRepTest {

    RepositoryService repositoryService;

    /**
     * 默认简化方式: 启动时会默认寻找classpath下面的activiti.cfg.xml文件
     */
    @Before
    public void initConfigWithDefault() {
        //创建流程引擎对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        repositoryService = processEngine.getRepositoryService();
    }

    /**
     * 部署流程 直接加载bpmn文件和图片文件
     */
    @Test
    public void deployActivitByPath() {
        //创建部署对象
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        //加载流程的配置文件和图片
        deploymentBuilder.addClasspathResource("diagrams/test.bpmn")
                .addClasspathResource("diagrams/test.png")
                .name("部署的流程定义名称")
                .category("业务分类,可自行定义")
        ;
        deploymentBuilder.deploy();
    }

    /**
     * 部署流程  直接加载bpmn文件和流程图片的压缩文件
     */
    @Test
    public void deployActivitByFileZip() {
        //创建部署对象
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        InputStream inputStream = this.getClass().getResourceAsStream("diagrams/test.zip");
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        //加载流程的配置文件和图片
        deploymentBuilder.addZipInputStream(zipInputStream)
                .name("部署的流程定义名称")
                .category("业务分类,可自行定义")
        ;
        deploymentBuilder.deploy();
    }
}

3.2生成的表数据

select *  from  act_re_deployment; -- 工作流部署表
select *  from  act_ge_bytearray; -- 存储二进制相关文件
select *  from  act_re_procdef; -- 流程定义数据

其中 act_re_procdef 表中的 RESOURCE_NAME_ 字段 = act_ge_bytearray中NAME_字段

 

 

4.删除流程定义

 

 

//删除流程定义
repositoryService.deleteDeployment(deploymentId);

5.查询流程定义

/**
     * 流程定义的查询(主要涉及表:act_re_procdef)
     * id: key:version:随机值
     * name: 对应流程文件process节点的name属性
     * key: 对应流程文件process节点的id属性
     * version: 发布时自动生成的,如果第一次发布的流程,version默认从1开始;  如果当前流程引擎中已经存在相同key的流程,则找到当前key的最高版本号,在最高版本号上加1
     */
    @Test
    public void queryProcessDefinition() {
        List<ProcessDefinition> processDefinitionList = repositoryService.createProcessDefinitionQuery()
                //添加查询条件
                //.processDefinitionName("流程定义的name")
                //.processDefinitionId("流程定义的id")
                //.processDefinitionKey("流程定义的key")
                //排序
                .orderByProcessDefinitionVersion().asc()
                //查询结果
                //.count() //返回结果集数量
                //.listPage(firstResult,  maxResults)//分页查询
                //.singleResult() //唯一结果
                .list();//总的结果集数量

        for(ProcessDefinition processDefinition:processDefinitionList){
            System.out.println("id:" +processDefinition.getId());
            System.out.println("name:" +processDefinition.getName());
            System.out.println("key:" +processDefinition.getKey());
            System.out.println("version:" +processDefinition.getVersion());
            System.out.println("resourceName:" +processDefinition.getDiagramResourceName());
        }

    }

 


总结

RepositoryService 核心就是流程文件的部署,删除,查询流程定义。