Flowable工作流-高级
Flowable高级
一、表介绍
Flowable生成的各个表
ACT_RE_ 表*: 存储流程定义相关的静态信息,如流程定义、流程部署等。
例如,ACT_RE_PROCDEF 表存储流程定义的静态信息,如流程定义ID、流程名称、版本号等。
ACT_RU_ 表*: 存储运行时的流程实例数据,如任务、流程变量等。
例如,ACT_RU_EXECUTION 表存储当前正在执行的流程实例信息,包括流程实例ID、流程定义ID、当前活动的节点等。
ACT_HI_ 表*: 存储历史数据,如已完成的流程实例、任务、活动实例等。
例如,ACT_HI_PROCINST 表存储已完成的流程实例的历史信息,包括流程实例ID、开始时间、结束时间等。
ACT_ID_ 表*: 存储身份验证和管理相关的信息,如用户、用户组、权限等。
例如,ACT_ID_USER 表存储用户信息,如用户名、密码、邮箱等。
ACT_GE_ 表*: 存储通用的引擎数据,如引擎属性、定时任务等
例如,ACT_GE_PROPERTY 表存储引擎属性信息,如数据库版本号、引擎名称等。
| 表分类 | 表名 | 解释 |
| 一般数据表 | ACT_GE_BYTEARRAY | 通用的流程定义和流程资源 |
| ACT_GE_PROPERTY | 系统相关属性 | |
| 流程历史记录 | ACT_HI_ACTINST | 历史的流程实例 |
| ACT_HI_ATTACHMENT | 历史的流程附件 | |
| ACT_HI_COMMENT | 历史的说明性信息 | |
| ACT_HI_DETAIL | 历史的流程运行中的细节信息 | |
| ACT_HI_IDENTITYLINK | 历史的流程运行过程中用户关系 | |
| ACT_HI_PROCINST | 历史的流程实例 | |
| ACT_HI_TASKINST | 历史的任务实例 | |
| ACT_HI_VARINST | 历史的流程运行中的变量信息 | |
| 用户用户组表 | ACT_ID_BYTEARRAY | 二进制数据表 |
| ACT_ID_GROUP | 用户组信息表 | |
| ACT_ID_INFO | 用户信息详情表 | |
| ACT_ID_MEMBERSHIP | 人与组关系表 | |
| ACT_ID_PRIV | 权限表 | |
| ACT_ID_PRIV_MAPPING | 用户或组权限关系表 | |
| ACT_ID_PROPERTY | 属性表 | |
| ACT_ID_TOKEN | 系统登录日志表 | |
| ACT_ID_USER | 用户表 | |
| 流程定义表 | ACT_RE_DEPLOYMENT | 部署单元信息 |
| ACT_RE_MODEL | 模型信息 | |
| ACT_RE_PROCDEF | 已部署的流程定义 | |
| 运行实例表 | 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_EVT_LOG | 事件日志表 |
| ACT_PROCDEF_INFO | 流程定义信息 |
我这边生成34个表
二、配置文件获取ProcessEngine
默认会加载resouce/flowable.cfg2.xml,所以我们在resource下面新建flowable.cfg2.xml就可以直接获取,不需要设置数据库连接
@Test public void processEngineDefault() { // 会加载resource下面的flowable.cfg.xml文件 // 配置文件类似创建了createStandaloneProcessEngineConfiguration ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); System.out.println("defaultProcessEngine = " + defaultProcessEngine); }
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcUrl" value="jdbc:mysql://101.4:33067/flowable?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true" /> <!-- 注意驱动,--> <property name="jdbcDriver" value="com.mysql.jdbc.Driver" /> <property name="jdbcUsername" value="root" /> <property name="jdbcPassword" value="beis6" /> <property name="databaseSchemaUpdate" value="true" /> <property name="asyncExecutorActivate" value="false" /> </bean> </beans>

也可以自定义配置文件名,然后使用下面方式获取,两种方法自定义获取和默认获取的方式很值得借鉴
@Test public void processEngine03() { // 会加载resource下面的flowable.cfg.xml文件 // 配置文件类似创建了createStandaloneProcessEngineConfiguration ProcessEngine defaultProcessEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("flowable.cfg2.xml").buildProcessEngine(); System.out.println("defaultProcessEngine = " + defaultProcessEngine); }
三、Service总览

RepositoryService
资源管理类,提供了管理和控制流程发布包和流程定义的操作
RuntimeService
流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息
TaskService
任务管理类。可以从这个类中获取任务的信息。
HistoryService
历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。
ManagementService
提供了对Flowable 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Flowable 系统的日常维护
获取方式:
RuntimeService runtimeService = defaultProcessEngine.getRuntimeService(); RepositoryService repositoryService = defaultProcessEngine.getRepositoryService(); TaskService taskService = defaultProcessEngine.getTaskService(); // ...
四、图标介绍
4.1 事件图标

4.2 活动任务图标

4.3 结构图标

4.4 网关图标

五、流程部署详解
5.1 流程部署实现
@Test public void test3(){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment() .addClasspathResource("holiday-request-new.bpmn20.xml") .name("请假流程...") .category("请假") // 分类 .tenantId("dpb") // 租户id .deploy(); System.out.println("deploy.getId() = " + deploy.getId()); System.out.println("deploy.getName() = " + deploy.getName()); System.out.println("deploy.getCategory() = " + deploy.getCategory()); }
5.2 流程部署涉及表
流程部署表:ACT_RE_DEPLOYMENT 一次流程部署操作会生成一条表结构
流程定义表:ACT_RE_PROCDEF 一次部署操作包含多个流程定义文件就会产生多条记录
流程定义资源文件表:ACT_GET_BYTEARRAY 有多少资源就会生成几条记录
涉及到的三张表:
部署资源表:act_ge_bytearray
| 字段 | 名称 | 备注 |
|---|---|---|
| ID_ | 主键 | |
| REV_ | 版本号 | |
| NAME_ | 名称 | 部署的文件名称,如:holiday-request-new.bpmn20.xml、holiday-request-new.bpmn20.png |
| DEPLOYMENT_ID_ | 部署ID | |
| BYTES_ | 字节(二进制数据) | |
| GENERATED_ | 是否系统生成 | 0为用户上传, 1为系统自动生成, 比如系统会 自动根据xml生 成png |
部署ID表:act_re_deployment
| 字段 | 名称 | 备注 |
|---|---|---|
| ID_ | 主键 | |
| NAME_ | 名称 | |
| CATEGORY_ | 分类 | |
| TENANT_ID_ | 租户ID | |
| DEPLOY_TIME_ | 部署时间 | |
| DERIVED_FROM_ | 来源于 | |
| DERIVED_FROM_ROOT_ | 来源于 | |
| ENGINE_VERSION_ | 流程引擎的版本 |
流程表:act_re_procdef
| 字段 | 名称 | 备注 |
|---|---|---|
| ID_ | 主键 | |
| REV_ | 版本号 | |
| CATEGORY_ | 分类 | 流程定义的Namespace就是类别 |
| NAME_ | 名称 | |
| KEY_ | 标识 | |
| VERSION_ | 版本 | |
| DEPLOYMENT_ID_ | 部署ID | |
| RESOURCE_NAME_ | 资源名称 | 流程bpmn文件名称 |
| DGRM_RESOURCE_NAME_ | 图片资源名称 | |
| DESCRIPTION_ | 描述 | |
| HAS_START_FORM_KEY_ | 拥有开始表单标识 | start节点是否存在formKey 0否 1是 |
| HAS_GRAPHICAL_NOTATION_ | 拥有图形信息 | |
| SUSPENSION_STATE_ | 挂起状态 | 暂停状态 1激活 2暂停 |
| TENANT_ID_ | 租户ID | |
5.3 挂起与激活
@Test public void test4(){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); //根据DeploymentId查询流程定义信息 表名:ACT_RE_PROCDEF ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionId("holidayRequest:1:3") .singleResult(); //suspension_state 1 是激活 2是挂起 if (processDefinition.isSuspended()) { //流程是挂起的 激活操作 System.out.println("流程是挂起的 执行激活操作"); repositoryService.activateProcessDefinitionById(processDefinition.getId()); }else{ //流程是激活的 挂起操作 System.out.println("流程是激活的 执行挂起操作"); //挂起流程执行启动流程会报异常:Cannot start process instance. Process definition 请假流程 (id = holidayRequest:1:3) is suspended repositoryService.suspendProcessDefinitionById(processDefinition.getId()); } }
注:挂起的流程就不能执行启动流程示例或者流转流程操作
11111111111111

浙公网安备 33010602011771号