Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)(二)

简介: Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)

查询流程定义

查询流程定义的信息代码:

@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 test05(){
    // 获取流程引擎对象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
            .processDefinitionId("holiday:1:4")
            .singleResult();
    // 获取流程定义的状态
    boolean suspended = processDefinition.isSuspended();
    System.out.println("suspended = " + suspended);
    if(suspended){
        // 表示被挂起
        System.out.println("激活流程定义");
        repositoryService.activateProcessDefinitionById("holiday:1:4",true,null);
    }else{
        // 表示激活状态
        System.out.println("挂起流程");
        repositoryService.suspendProcessDefinitionById("holiday:1:4",true,null);
    }
}

具体的实现其实就是更新了流程定义表中的字段

而且通过REV_字段来控制数据安全,也是一种乐观锁的体现了,如果要启动一个已经挂起的流程就会出现如下的错误

启动流程实例

然后我们来看看启动流程实例的过程。实现代码如下:

/**
     * 启动流程实例
     */
    @Test
    public void testRunProcess(){
        // 获取流程引擎对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 启动流程实例通过 RuntimeService 对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 构建流程变量
        Map<String,Object> variables = new HashMap<>();
        variables.put("employee","张三") ;// 谁申请请假
        variables.put("nrOfHolidays",3); // 请几天假
        variables.put("description","工作累了,想出去玩玩"); // 请假的原因
        // 启动流程实例,第一个参数是流程定义的id
        ProcessInstance processInstance = runtimeService
                .startProcessInstanceById("holiday:1:4", variables);// 启动流程实例
        // 输出相关的流程实例信息
        System.out.println("流程定义的ID:" + processInstance.getProcessDefinitionId());
        System.out.println("流程实例的ID:" + processInstance.getId());
        System.out.println("当前活动的ID:" + processInstance.getActivityId());
    }

当我们启动了一个流程实例后,会在ACT_RU_*对应的表结构中操作,运行时实例涉及的表结构共10张:

  • ACT_RU_DEADLETTER_JOB 正在运行的任务表
  • ACT_RU_EVENT_SUBSCR 运行时事件
  • ACT_RU_EXECUTION 运行时流程执行实例
  • ACT_RU_HISTORY_JOB 历史作业表
  • ACT_RU_IDENTITYLINK 运行时用户关系信息
  • ACT_RU_JOB 运行时作业表
  • ACT_RU_SUSPENDED_JOB 暂停作业表
  • ACT_RU_TASK 运行时任务表
  • ACT_RU_TIMER_JOB 定时作业表
  • ACT_RU_VARIABLE 运行时变量表

启动一个流程实例的时候涉及到的表有

  • ACT_RU_EXECUTION 运行时流程执行实例
  • ACT_RU_IDENTITYLINK 运行时用户关系信息
  • ACT_RU_TASK 运行时任务表
  • ACT_RU_VARIABLE 运行时变量表

ACT_RU_EXECUTION表结构

字段 名称 备注
ID_ 主键
REV_ 版本号
PROC_INST_ID_ 流程实例ID
BUSINESS_KEY_ 业务主键ID
PARENT_ID_ 父执行流的ID
PROC_DEF_ID_ 流程定义的数据ID
SUPER_EXEC_
ROOT_PROC_INST_ID_ 流程实例的root流程id
ACT_ID_ 节点实例ID
IS_ACTIVE_ 是否存活
IS_CONCURRENT_ 执行流是否正在并行
IS_SCOPE_
IS_EVENT_SCOPE_
IS_MI_ROOT_
SUSPENSION_STATE_ 流程终端状态
CACHED_ENT_STATE_
TENANT_ID_ 租户编号
NAME_
START_TIME_ 开始时间
START_USER_ID_ 开始的用户编号
LOCK_TIME_ 锁定时间
IS_COUNT_ENABLED_
EVT_SUBSCR_COUNT_
TASK_COUNT_
JOB_COUNT_
TIMER_JOB_COUNT_
SUSP_JOB_COUNT_
DEADLETTER_JOB_COUNT_
VAR_COUNT_
ID_LINK_COUNT_

创建流程实例后对应的表结构的数据

ACT_RU_TASK 运行时任务表

字段 名称 备注
ID_ 主键
REV_ 版本号
EXECUTION_ID_ 任务所在的执行流ID
PROC_INST_ID_ 流程实例ID
PROC_DEF_ID_ 流程定义数据ID
NAME_ 任务名称
PARENT_TASK_ID_ 父任务ID
DESCRIPTION_ 说明
TASK_DEF_KEY_ 任务定义的ID值
OWNER_ 任务拥有人
ASSIGNEE_ 被指派执行该任务的人
DELEGATION_ 委托人
PRIORITY_ 优先级
CREATE_TIME_ 创建时间
DUE_DATE_ 耗时
CATEGORY_ 类别
SUSPENSION_STATE_ 是否挂起 1代表激活 2代表挂起
TENANT_ID_ 租户编号
FORM_KEY_
CLAIM_TIME_ 拾取时间

创建流程实例后对应的表结构的数据

ACT_RU_VARIABLE 运行时变量表

字段 名称 备注
ID_ 主键
REV_ 版本号
TYPE_ 参数类型 可以是基本的类型,也可以用户自行扩展
NAME_ 参数名称
EXECUTION_ID_ 参数执行ID
PROC_INST_ID_ 流程实例ID
TASK_ID_ 任务ID
BYTEARRAY_ID_ 资源ID
DOUBLE_ 参数为double,则保存在该字段中
LONG_ 参数为long,则保存在该字段中
TEXT_ 用户保存文本类型的参数值
TEXT2_ 用户保存文本类型的参数值

创建流程实例后对应的表结构的数据

ACT_RU_IDENTITYLINK 运行时用户关系信息

字段 名称 备注
ID_ 主键
REV_ 版本号
GROUP_ID_ 用户组ID
TYPE_ 关系数据类型 assignee支配人(组)、candidate候选人(组)、owner拥有人,participant参与者
USER_ID_ 用户ID
TASK_ID_ 任务ID
PROC_INST_ID_ 流程定义ID
PROC_DEF_ID_ 属性ID

创建流程实例后对应的表结构的数据:

处理流程

上面的流程已经流转到了zhangsan这个用户这里,然后可以开始审批了

// 获取流程引擎对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processDefinitionId("holiday:1:4")
                .taskAssignee("zhangsan")
                .singleResult();
        // 添加流程变量
        Map<String,Object> variables = new HashMap<>();
        variables.put("approved",false); // 拒绝请假
        // 完成任务
        taskService.complete(task.getId(),variables);

在正常处理流程中涉及到的表结构

  • ACT_RU_EXECUTION 运行时流程执行实例
  • ACT_RU_IDENTITYLINK 运行时用户关系信息
  • ACT_RU_TASK 运行时任务表
  • ACT_RU_VARIABLE 运行时变量表
相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
4969 0
|
存储 XML 数据库
Flowable 完整表结构说明(一)
Flowable 完整表结构说明
2490 0
|
SQL XML 存储
Flowable 流程部署与删除
Flowable 流程部署与删除
1029 0
|
数据可视化 前端开发 Java
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)(一)
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)
3145 0
|
8月前
|
前端开发 Java API
SpringBoot整合Flowable【06】- 查询历史数据
本文介绍了Flowable工作流引擎中历史数据的查询与管理。首先回顾了流程变量的应用场景及其局限性,引出表单在灵活定制流程中的重要性。接着详细讲解了如何通过Flowable的历史服务API查询用户的历史绩效数据,包括启动流程、执行任务和查询历史记录的具体步骤,并展示了如何将查询结果封装为更易理解的对象返回。最后总结了Flowable提供的丰富API及其灵活性,为后续学习驳回功能做了铺垫。
554 0
SpringBoot整合Flowable【06】- 查询历史数据
|
8月前
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
1216 1
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
8月前
|
存储 Java API
SpringBoot整合Flowable【02】- 整合初体验
本文介绍了如何基于Flowable 6.8.1版本搭建工作流项目。首先,根据JDK和Spring Boot版本选择合适的Flowable版本(7.0以下)。接着,通过创建Spring Boot项目并配置依赖,包括Flowable核心依赖、数据库连接等。然后,建立数据库并配置数据源,确保Flowable能自动生成所需的表结构。最后,启动项目测试,确认Flowable成功创建了79张表。文中还简要介绍了这些表的分类和常用表的作用,帮助初学者理解Flowable的工作原理。
1479 0
SpringBoot整合Flowable【02】- 整合初体验
|
存储
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)(三)
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)
616 0
|
开发框架 Java API
Spring Boot与Flowable的完美整合
【4月更文挑战第20天】
3766 2
|
SQL 前端开发
基于jeecgboot的flowable驳回修改以及发起人设置
基于jeecgboot的flowable驳回修改以及发起人设置
434 0