当前位置: 首页 > 图灵资讯 > 技术篇> Flowable基础表介绍-基础Service接口

Flowable基础表介绍-基础Service接口

来源:图灵教育
时间:2023-05-31 09:14:43

基础表结构

  1. Flowable的所有数据库表都是从ACT_开始的。第二部分是两个字符标记符来解释表的用途。
  2. ACT_RE_: 'RE代表repository。前缀表包含“静态”信息,如流程定义和流程资源(图片、规则等)。
  3. ACT_RU_: 'RU代表runtime。这些表存储运行时的信息,如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等等。Flowable只在流程实例运行中保存运行数据,并在流程实例结束时删除记录。确保运行时间表小而快。
  4. ACT_HI_: 'HI代表history。这些表存储历史数据,如已完成的流程实例、变量、任务等。
  5. ACT_GE_: 通用数据。多处使用。
通用数据表
  • act_ge_bytearray:二进制数据表,如流程定义、流程模板、流程图等字节流文件;
  • act_ge_property:属性数据表(不常用);
历史表(HistoryService接口操作表)
  • act_hi_actinst:各节点信息(包括开始、结束等非任务节点)的历史节点表、存储过程实例运行;
  • act_hi_attachment:存储历史节点上传的附件信息(不常用);
  • act_hi_comment:历史意见表;
  • act_hi_detail:历史细节表,存储节点运行的一些信息(不常用);
  • act_hi_identitylink:历史流程人员表,存储流程各节点的候选人和处理人员信息,常用于查询某人或部门已完成的任务;
  • act_hi_procinst:历史流程实例表、存储流程实例历史数据(包括正在运行的流程实例);
  • act_hi_taskinst:存储历史任务节点的历史流程任务表;
  • act_hi_varinst:流程历史变量表,存储流程历史节点的变量信息;
用户相关表(IdentityService操作表)
  • act_id_group:用户组信息表,选择相应节点的候选组信息;
  • act_id_info:用户扩展信息表,存储用户扩展信息;
  • act_id_membership:用户与用户组的关系表;
  • act_id_user:选择相应节点的用户信息表或候选人信息;
与流程模板相关的表(RepositoryService操作)
  • act_re_deployment:存储过程定义、模板部署信息的部属信息表;
  • act_re_procdef:流程定义信息表,存储流程定义相关描述信息,但其真实内容存储在act_ge_bytearay表以字节形式存储;
  • act_re_model:流程模板信息表,存储流程模板相关描述信息,但其真实内容存储在act_ge_bytearay表以字节形式存储;
流程运行时表(RuntimeService操作)
  • act_ru_task:操作过程中的任务节点表,存储操作过程中的任务节点信息,常用于查询人员或部门的待办任务;
  • act_ru_event_subscr:监控信息表,不常用;
  • act_ru_execution:运行过程执行实例表,记录运行过程中运行的各个分支信息(当没有子流程时,其数据与act_ru_task表数据一一对应);
  • act_ru_identitylink:操作过程人员表,重要,常用于查询人员或部门的待办任务;
  • act_ru_job:操作时定时任务数据表,存储过程中定时任务信息;
  • act_ru_variable:操作过程中的流程变量数据表,存储操作过程中各节点的变量信息;
流程引擎API和服务Service服务接口

Service是工作流引擎为工作流部署、执行和管理提供的服务接口。我们使用这些接口可以是操作服务对应的数据表

Flowable基础表介绍-基础Service接口_服务

Service创建方法

Servicececesengine通过Procesengine创建

RuntimeService runtimeService = processEngine.getRuntimeService();RepositoryService repositoryService = processEngine.getRepositoryService();TaskService taskService = processEngine.getTaskService();// ...

Service总结

service名称

service功能

RepositoryService

Flowable资源管理类

RuntimeService

Flowable的流程运行管理

TaskService

Flowable任务管理类

HistoryService

Flowable的历史管理

ManagerService

Flowable引擎管理类

RepositoryService

它是activiti的资源管理类别,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要将流程定义文件的内容部署到计算机中。

除了部署流程定义外,还可以查询引擎中的发布包和流程定义。

对应全部和具体流程的定义,暂停或激活发布包。 暂停意味着它们不能再执行任何操作,激活是相应的反向操作。获取包含在发布包中的文件等多种资源, 或由引擎自动生成的流程图。

pojo版本获得流程定义, 无需xml,可用于java分析过程。

RuntimeService

Activiti的流程运行管理。您可以从这个服务类别中获得大量关于流程执行的信息

TaskService

Activiti的任务管理类别。任务信息可以从这个类别中获得。

HistoryService

Flowable的历史管理可以查询历史信息。在执行过程时,引擎将保存大量数据(根据配置),如流程实例启动时间和任务参与者, 完成任务的时间、每个流程实例的执行路径等。 该服务主要通过查询功能获取这些数据。

ManagementService

Activiti的引擎管理提供了Flowable 工作流驱动的应用程序中不使用流程引擎的管理和维护功能,主要用于 Flowable 日常维护系统。

实战

package com.bobo.flowable.test;import org.flowable.engine.*;import org.flowable.engine.history.HistoricActivityInstance;import org.flowable.engine.history.HistoricActivityInstanceQuery;import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;import org.flowable.engine.repository.Deployment;import org.flowable.engine.repository.DeploymentBuilder;import org.flowable.engine.repository.ProcessDefinition;import org.flowable.engine.repository.ProcessDefinitionQuery;import org.flowable.engine.runtime.ProcessInstance;import org.flowable.task.api.Task;import org.junit.Before;import org.junit.Test;import java.util.HashMap;import java.util.List;import java.util.Map;public class Test01 {    /**     * 获取流程引擎对象     */    @Test    public void testProcessEngine() {        // 获取  ProcessEngineConfiguration 对象        ProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();        // 配置 相关数据库的连接信息        configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");        configuration.setJdbcUsername("root");        configuration.setJdbcPassword("123456");        configuration.setJdbcUrl("jdbc:mysql://localhost:3306/flowable-learn?serverTimezone=UTC&nullCatalogMeansCurrent=true");        // 如果数据库中的表结构不存在,则新建        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);        // 通过 ProcessEngineConfiguration 构建我们需要的东西 processEngine 对象        ProcessEngine processEngine = configuration.buildProcessEngine();        System.out.println("processEngine = " + processEngine);    }    ProcessEngineConfiguration configuration = null;    @Before    public void before() {        // 获取  ProcessEngineConfiguration 对象        configuration = new StandaloneProcessEngineConfiguration();        // 配置 相关数据库的连接信息        configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");        configuration.setJdbcUsername("root");        configuration.setJdbcPassword("123456");        configuration.setJdbcUrl("jdbc:mysql://localhost:3306/flowable-learn?serverTimezone=UTC&nullCatalogMeansCurrent=true");        // 如果数据库中的表结构不存在,则新建        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);    }    /**     * 部署流程     */    @Test    public void testDeploy() {        // 1.获取 ProcessEngine 对象        ProcessEngine processEngine = configuration.buildProcessEngine();        // 2.获得RepositoryServicecee        RepositoryService repositoryService = processEngine.getRepositoryService();        // 3.完成流程的部署操作        Deployment deploy = repositoryService.createDeployment()                .addClasspathResource("holiday-request.bpmn20.xml")// 关联要部署的流程文件                .name(“请求流程”)                .deploy();// 部署流程        System.out.println("deploy.getId() = " + deploy.getId());        System.out.println("deploy.getName() = " + deploy.getName());    }    /**     * 查询流程定义的信息     */    @Test    public void testDeployQuery() {        ProcessEngine processEngine = configuration.buildProcessEngine();        RepositoryService repositoryService = processEngine.getRepositoryService();        /*ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();        ProcessDefinition processDefinition = processDefinitionQuery.deploymentId("1").singleResult();*/        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()                .deploymentId("1")                .singleResult();        System.out.println("processDefinition.getDeploymentId() = " + processDefinition.getDeploymentId());        System.out.println("processDefinition.getName() = " + processDefinition.getName());        System.out.println("processDefinition.getDescription() = " + processDefinition.getDescription());        System.out.println("processDefinition.getId() = " + processDefinition.getId());    }    /**     * 删除流程定义     */    @Test    public void testDeleteDeploy() {        ProcessEngine processEngine = configuration.buildProcessEngine();        RepositoryService repositoryService = processEngine.getRepositoryService();        // 删除部署过程 第一个参数是 id  如果部署过程启动,则不允许删除///        repositoryService.deleteDeployment("2501");        // 第二个参数是级联删除,若流程启动 删除相关任务        repositoryService.deleteDeployment("1", true);    }    /**     * 启动过程实例     */    @Test    public void testRunProcess() {        ProcessEngine processEngine = configuration.buildProcessEngine();        // 我们需要通过RuntimeService来启动过程实例        RuntimeService runtimeService = processEngine.getRuntimeService();        // 施工过程变量        Map<String, Object> variables = new HashMap<>();        variables.put("employee", "张三");        variables.put("nrOfHolidays", 3);        variables.put("desciption", 工作累了,出去玩”);        // 启动过程实例 holidayRequest是流程文件(bpmn)id        ProcessInstance holidayRequest = runtimeService.startProcessInstanceByKey("holidayRequest", variables);        System.out.println("holidayRequest.getProcessDefinitionId() = " + holidayRequest.getProcessDefinitionId());        System.out.println("holidayRequest.getActivityId() = " + holidayRequest.getActivityId());        System.out.println("holidayRequest.getId() = " + holidayRequest.getId());    }    /**     * 查询测试任务     */    @Test    public void testQueryTask() {        ProcessEngine processEngine = configuration.buildProcessEngine();        TaskService taskService = processEngine.getTaskService();        List<Task> list = taskService.createTaskQuery()                .processDefinitionKey("holidayRequest") // 流程编程指定查询                .taskAssignee("zhangsan") // 查询此任务的处理人                .list();        for (Task task : list) {            System.out.println("task.getProcessDefinitionId() = " + task.getProcessDefinitionId());            System.out.println("task.getName() = " + task.getName());            System.out.println("task.getAssignee() = " + task.getAssignee());            System.out.println("task.getDescription() = " + task.getDescription());            System.out.println("task.getId() = " + task.getId());        }    }    /**     * 完成当前任务     */    @Test    public void testCompleteTask() {        ProcessEngine processEngine = configuration.buildProcessEngine();        TaskService taskService = processEngine.getTaskService();        Task task = taskService.createTaskQuery()                .processDefinitionKey("holidayRequest")                .taskAssignee("zhangsan")                .singleResult();        // 创建流程变量        Map<String, Object> map = new HashMap<>();        map.put("approved", false);        // 完成任务        taskService.complete(task.getId(), map);    }    /**     * 获取流程任务的历史数据     */    @Test    public void testHistory() {        ProcessEngine processEngine = configuration.buildProcessEngine();        HistoryService historyService = processEngine.getHistoryService();        List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()                .processDefinitionId("holidayRequest:1:5003")                .finished() // 查询的历史记录状态已经完成                .orderByHistoricActivityInstanceEndTime().asc() // 指定排序的字段和顺序                .list();        for (HistoricActivityInstance history : list) {            System.out.println(history.getActivityName() + ":" + history.getAssignee() + "--"                    + history.getActivityId() + ":" + history.getDurationInMillis() + "毫秒");        }    }}