---
title: 6.流程引擎
description: activiti流程引擎模块的使用
published: true
date: 2022-04-23T07:04:27.737Z
tags: wg-basic, activiti
editor: markdown
dateCreated: 2021-09-01T09:28:31.684Z
---
# 说明
流程引擎模块引入了 **activiti** 框架,目前可以完成流程的绘制、部署与流程图的查看。模块自带流程绘制功能,无需再使用插件绘制流程文件。
该模块需要手动添加管理菜案
> 绘制 OA 流程时,动态表单需要先设计,并且表单类型为 **OA**。
> 非 OA 流程正常绘制流程图即可。
{.is-info}
# 更新
- 20220423:增加了OA流程管理,结合动态表单与流程绘制中的OA节点管理可完成无代码OA表单流转。
# 依赖
```xml
ink.wgink
module-activiti
1.0-SNAPSHOT
```
# 配置说明
```yaml
spring:
# 流程引擎
activiti:
# flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。
# true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建。
# create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)。
# drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
database-schema-update: true
#检测历史表是否存在
db-history-used: true
# 记录历史等级 可配置的历史级别有none, acitivity, audit, all
history-level: full
# 检查流程定义
check-process-definitions: false
rest-api-enabled: true
rest-api-servlet-name: activiti-swagger-document
SpringProcessEngineConfiguration:
activityFontName: 宋体
labelFontName: 宋体
dataSource: datasource
```
注意:`spring.datasource.druid.url` 配置中需要追加 **nullCatalogMeansCurrent=true** 参数用于防止项目启动自动建表失败的
# 启动类
启动类需要增加配置
`@SpringBootApplication` 注解增加 `exclude=SecurityAutoConfiguration.class`
```
import org.activiti.spring.boot.SecurityAutoConfiguration;
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
```
# 添加菜单
**流程菜单**
流程模型:`/route/activiti/list`
流程定义:`/route/activiti/procdef/list`
**OA菜单**
发起流程:`/route/oa/list-procdef`
我的待办:`/route/oa/list-task-of-mine`
我的已办:`/route/oa/list-history-task-of-mine`
**表单菜单**
表单管理:`/route/form/list`
# 如何启动流程
1. 在流程管理菜单下将流程绘制好并部署后,会生成 **部署ID(deploymentId)**
2. 使用如下代码启动流程
```java
// 获取流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
// 获取流程定义ID
String processDefinitionId = processDefinition.getId();
// 流程变量(如果需要)
Map variableMap = new HashMap<>();
// 业务ID(如果需要)
String businessId = "businessId";
// 启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, "businessId", variableMap);
```