2023最新版本Activiti7系列

2023最新版本Activiti7系列

一、Activiti7概述

官网地址:https://www.activiti.org/

Activiti由Alfresco软件开发,目前最高版本Activiti 7。是BPMN的一个基于java的软件实现,不过Activiti 不仅仅包括BPMN,还有DMN决策表和CMMN Case管理引擎,并且有自己的用户管理、微服务API等一系列功能,是一个服务平台。

二、Activiti7的入门案例官方手册:http://jeecg.com/activiti5.21/

1.创建SpringBoot项目 现在开发中或者我们自己学习写案例都是通过SpringBoot脚手架工具来快速构建项目的。那么我们也就直接通过创建SpringBoot项目来给大家讲解相关的案例。创建一个普通的SpringBoot项目。指定版本为2.4.2即可

然后添加对应的依赖:Activiti7的依赖和MySQL的依赖

代码语言:javascript代码运行次数:0运行复制

1.8

UTF-8

UTF-8

2.4.2

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

8.0.23

org.springframework.boot

spring-boot-starter-test

test

org.activiti

activiti-spring-boot-starter

7.0.0.GA

org.springframework.boot

spring-boot-dependencies

${spring-boot.version}

pom

import

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

${spring-boot.version}

com.boge.act.PrepareDemo2Application

true

repackage

repackage

相关的Activiti依赖加载进来了

到这儿基本环境就OK了

2.获取ProcessEngine2.1 默认的方式 在工作流引擎框架中,ProcessEngine是一个非常核心的对象,我们需要首先解决这个对象的获取。获取方式很多。先来看最简单的一个基于activiti.cfg.xml的XML文件的配置方式。

代码语言:javascript代码运行次数:0运行复制@Test

public void test1(){

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

System.out.println(processEngine);

} 通过getDefaultProcessEngine方法加载会默认的从classpath路径下加载activiti.cfg.xml配置文件。我们添加该文件。内容如下:

代码语言:javascript代码运行次数:0运行复制

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">

然后我们就可以启动,但是出现了如下错误:

出现这种情况只需要在mysql的连接字符串中添加上nullCatalogMeansCurrent=true,设置为只查当前连接的schema库即可。

代码语言:javascript代码运行次数:0运行复制

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">

然后执行程序正确。搞定。同时在数据库中创建了相关的表结构

2.2 编程方式获取 上面的配置文件的方式中的配置文件其实是一个Spring的配置文件,但是这并不意味着Activiti只能用于Spring环境。我们也可以通过编程的方式来使用配置文件,从而来构建ProcessEngineConfiguration对象,具体的实现如下:

代码语言:javascript代码运行次数:0运行复制@Test

public void test2(){

ProcessEngine engine = ProcessEngineConfiguration

.createStandaloneInMemProcessEngineConfiguration()

.setJdbcUrl("jdbc:mysql://localhost:3306/activiti7?nullCatalogMeansCurrent=true")

.setJdbcDriver("com.mysql.cj.jdbc.Driver")

.setJdbcPassword("123456")

.setJdbcUsername("root")

.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)

.buildProcessEngine();

System.out.println(engine);

}上面讲解中的相关属性说明:

databaseSchemaUpdate:用于设置流程引擎启动关闭时使用的数据库表结构控制策略

false (默认): 当引擎启动时,检查数据库表结构的版本是否匹配库文件版本。版本不匹配时抛出异常。true: 构建引擎时,检查并在需要时更新表结构。表结构不存在则会创建。create-drop: 引擎创建时创建表结构,并在引擎关闭时删除表结构。2.3 表结构介绍 在Activiti7中。我们启动服务会自动维护Activiti7需要使用到的相关的表结构。在这块我们需要有个大概的了解。首先是支持的数据库有:

Activiti数据库类型

示例JDBC URL

备注

h2

jdbc:h2:tcp://localhost/activiti

默认配置的数据库

mysql

jdbc:mysql://localhost:3306/activiti?autoReconnect=true

已使用mysql-connector-java数据库驱动测试

oracle

jdbc:oracle:thin:@localhost:1521:xe

postgres

jdbc:postgresql://localhost:5432/activiti

db2

jdbc:db2://localhost:50000/activiti

mssql

jdbc:sqlserver://localhost:1433;databaseName=activiti (jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver) OR jdbc:jtds:sqlserver://localhost:1433/activiti (jdbc.driver=net.sourceforge.jtds.jdbc.Driver)

已使用Microsoft JDBC Driver 4.0 (sqljdb

Activiti的所有数据库表都以**ACT_**开头。第二部分是说明表用途的两字符标示符。服务API的命名也大略符合这个规则。

ACT_RE_*: RE代表repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片、规则等)。

ACT_RU_*: RU代表runtime。这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。Activiti只在流程实例运行中保存运行时数据,并在流程实例结束时删除记录。这样保证运行时表小和快。

ACT_ID_*: ID代表identity。这些表包含身份信息,例如用户、组等。

ACT_HI_*: HI代表history。这些表存储历史数据,例如已完成的流程实例、变量、任务等。

ACT_GE_*: 通用数据。用于不同场景下

注意:MySQL数据库最好使用5.7及以上的版本

3.在线流程设计器 接下来我们通过官方提供的流程设计器来实现一个简单流程的设计。然后完成相关的部署和流程整体操作。

官网下载地址:https://www.activiti.org/get-started 下载下来后解压缩

进入到wars中。提供的有Activiti-app.war

把这war包拷贝到Tomcat服务器中即可。注意Tomcat的版本不要高于8.5,然后Tomcat服务。访问 http://localhost:8080/activiti-app 即可。登录的账号密码是 admin test

点击create process 弹出窗口。录入相关的流程定义信息

绘制好流程图后。保存并下载对应的xml文件

得到的流程图的xml内容:

代码语言:javascript代码运行次数:0运行复制

test1

然后我们就可以做流程的部署操作了

4.流程操作4.1 流程部署 设计好了流程图我们就可以通过如下的代码完成流程的部署。

代码语言:javascript代码运行次数:0运行复制 /**

* 流程部署操作

*/

@Test

public void test3(){

// 1.获取ProcessEngine对象

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

// 2.完成流程的部署操作 需要通过RepositoryService来完成

RepositoryService repositoryService = processEngine.getRepositoryService();

// 3.完成部署操作

Deployment deploy = repositoryService.createDeployment()

.addClasspathResource("flow/test1.bpmn20.xml")

.name("第一个流程")

.deploy();

System.out.println(deploy.getId());

System.out.println(deploy.getName());

}流程部署的行为会涉及到数据库中的这两张表

然后我们可以通过Activiti提供的相关的API来获取流程部署和流程定义的相关信息

代码语言:javascript代码运行次数:0运行复制/**

* 查询当前部署的流程有哪些

*/

@Test

public void test4(){

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = engine.getRepositoryService();

// 查询有哪些部署的流程--》查询相关的流程定义信息

// repositoryService.createDeploymentQuery() 查询流程部署的相关信息

// repositoryService.createProcessDefinitionQuery() 查询部署的流程的相关的定义

List list = repositoryService.createDeploymentQuery().list(); // 查询所有的部署信息

for (Deployment deployment : list) {

System.out.println(deployment.getId());

System.out.println(deployment.getName());

}

List list1 = repositoryService.createProcessDefinitionQuery().list();

for (ProcessDefinition processDefinition : list1) {

System.out.println(processDefinition.getId());

System.out.println(processDefinition.getName());

System.out.println(processDefinition.getDescription());

}

}4.2 发起流程 部署流程成功后。我们就可以发起一个流程。发起流程需要通过RuntimeService来实现。

代码语言:javascript代码运行次数:0运行复制/**

* 发起一个流程

*/

@Test

public void test5(){

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

// 发起流程 需要通过 runtimeService来实现

RuntimeService runtimeService = engine.getRuntimeService();

// 通过流程定义ID来启动流程 返回的是流程实例对象

ProcessInstance processInstance = runtimeService

.startProcessInstanceById("test1:1:3");

System.out.println("processInstance.getId() = " + processInstance.getId());

System.out.println("processInstance.getDeploymentId() = " + processInstance.getDeploymentId());

System.out.println("processInstance.getDescription() = " + processInstance.getDescription());

}发起流程成功后。在对应的act_ru_task中就有一条对应的待办记录。

对应的流程状态如下:

4.3 查询流程 用户登录后要查看待办的任务信息。我们需要通过TaskService来实现查询操作。具体代码如下:

代码语言:javascript代码运行次数:0运行复制/**

* 待办查询

*/

@Test

public void test6(){

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

// 待办查询 执行中的任务处理通过 TaskService来实现

TaskService taskService = engine.getTaskService();

// Task 对象对应的其实就是 act_ru_task 这张表的记录

List list = taskService.createTaskQuery().taskAssignee("lisi").list();

if(list != null && list.size() > 0){

for (Task task : list) {

System.out.println(task.getId());

System.out.println(task.getName());

System.out.println(task.getAssignee());

}

}else{

System.out.println("当前没有待办任务");

}

}4.4 审批流程 当前登录用户查看到相关的待办信息后。可以做流程的审批处理。

代码语言:javascript代码运行次数:0运行复制/**

* 任务审批

*/

@Test

public void test7(){

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

// 做任务申请 也需要通过 TaskService 来实现

TaskService taskService = engine.getTaskService();

// 根据当前登录用户查询出对应的待办信息

List list = taskService.createTaskQuery().taskAssignee("lisi").list();

if(list != null && list.size() > 0){

for (Task task : list) {

// 做对应的任务审批处理

taskService.complete(task.getId());

}

}

// 完成任务

// taskService.complete("2505");

}5.涉及表结构 上面一个审批涉及到的表结构的介绍

表名

说明

act_re_deployment

部署流程的记录表:一次部署行为会产生一张表

act_re_procdef

流程定义表:一张流程图对应的表

act_hi_procinst

流程实例表:发起一个流程。就会创建对应的一张表

act_ru_task

流程待办表:当前需要审批的记录表,节点审批后就会被删除

act_hi_actinst

历史记录:流程审批节点的记录信息

6.流程设计器持久化 流程设计器默认是通过H2来完成数据的存储的。而H2是基于内存来存储的。所以重启服务后数据就丢失了。这时我们可以设置流程设计器的存储方式为MySQL。这样就能持久化的实现存储了。具体步骤如下:

调整数据库的连接信息。记得同时需要创建对应的数据库

切换了数据的存储方案后。我们需要记得把对应的数据库的驱动拷贝进来

然后我们就可以重启服务测试了。如果出现下面的错误,降低MySQL驱动的版本到8.0.19

配置的时区不配支持。我们需要添加

启动成功后。在数据库中会维护相关的表结构

该操作中需要注意的点:

修改配置文件中的信息关键是连接地址的路径:jdbc:mysql://localhost:3306/activiti6ui?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true

MySQL的驱动版本不要高于8.0.19,不然会出现LocalDataTime转换的问题

7.流程设计器汉化说明 流程设计器的汉化操作

代码语言:javascript代码运行次数:0运行复制{

"GENERAL": {

"MAIN-TITLE": "Activiti",

"ERROR": {

"GENERIC": "抱歉,发生了一个错误。",

"UNKNOWN": "抱歉,执行请求的操作时出错。",

"BAD_REQUEST": "执行请求的操作时出错。",

"NOT_FOUND": "您试图访问的资源不存在。",

"UNAUTHORIZED": "您应该登录才能执行请求的操作。",

"FORBIDDEN": "不允许您执行请求的操作。",

"INTERNAL_SERVER_ERROR": "抱歉,执行请求的操作时发生意外错误。",

"QUOTA-EXCEEDED-RUNTIME-APPS": "作为试用用户,您只能同时部署 {{quota}} 应用程序。",

"QUOTA-EXCEEDED-LICENSE-APPS": "许可证只允许同时部署 {{quota}} 应用程序。"

},

"ACTION": {

"LOGOUT": "退出",

"HELP": "入门",

"EDIT-PROFILE": "编辑配置文件",

"SAVE": "保存",

"CANCEL": "取消",

"CLOSE": "关闭",

"DEPLOY": "部署",

"ABOUT": "关于Alfresco Activiti"

}

},

"LOGIN": {

"TITLE": "登录",

"USERNAME": "用户名",

"USERNAME-PLACEHOLDER": "输入您的用户名",

"PASSWORD": "密码",

"PASSWORD-PLACEHOLDER": "输入您的密码",

"INVALID-CREDENTIALS": "域相关参数设置有误",

"ACTION": {

"CONFIRM": "登录"

}

},

"ACCOUNT": {

"ACTIVATE": {

"TITLE": "激活帐户",

"ACTIVATING-MESSAGE": "请稍候 {{userFullName}} 我们正在激活您的帐户。",

"SUCCESS-MESSAGE": "您的帐户已激活。请在下面登录以开始设计和运行流程。",

"FAILURE-MESSAGE": "无法激活您的帐户。它已被激活或激活链接已过期。"

},

"RESET-PASSWORD-REQUEST": {

"MESSAGE": "忘记密码了?在下面输入您的电子邮件地址以接收电子邮件以重置密码。",

"TITLE": "重置密码",

"EMAIL": "电子邮件地址",

"EMAIL-PLACEHOLDER": "输入您的电子邮件",

"SECURITY-SECTION": "安全检查",

"CONFIRM": "请求密码重置",

"SUCCESS-MESSAGE": "您将很快收到一封邮件,其中包含重置密码的链接",

"ERROR": {

"UNEXISTING-USER": "具有给定电子邮件地址的用户不存在。"

}

},

"RESET-PASSWORD": {

"TITLE": "重置密码",

"PASSWORD": "密码",

"PASSWORD-CONFIRM": "确认密码",

"PASSWORD-PLACEHOLDER": "输入新密码",

"PASSWORD-CONFIRM-PLACEHOLDER": "确认新密码",

"CONFIRM": "更改密码",

"LOADING": "正在重置密码...",

"SUCCESS-MESSAGE": "您的密码已更改。",

"LOGIN": "马上登录",

"FAILURE-MESSAGE": "您的密码无法重置。重置链接无效或已过期。"

}

},

"APP": {

"KICKSTART": {

"TITLE": "启动程序",

"DESCRIPTION": "创建流程模型、表单和应用程序定义,然后与其他人共享您的模型和定义。"

},

"TASKS": {

"TITLE": "任务应用程序",

"DESCRIPTION": "访问您的完整任务列表,并从任何流程应用程序处理分配给您的任何任务。同时,启动新的流程和任务。"

},

"IDENTITY-MANAGEMENT": {

"TITLE": "身份管理",

"TITLE-TENANT-ADMIN": "身份管理",

"DESCRIPTION": "管理您的配置文件:更改图片、名称和其他设置。作为管理员用户,管理用户和组。",

"DESCRIPTION-TENANT-ADMIN": "管理组织中的用户和组。"

},

"CUSTOM-APP" : {

"TITLE-TASKS": "任务",

"TITLE-PROCESSES": "流程"

},

"POPUP" : {

"ADD-APP-TITLE": "将App添加到登录页",

"ADD-APP-SUMMARY": "将App添加到登录页"

},

"ACTION": {

"DELETE": "删除App"

},

"MESSAGE": {

"DELETED": "已成功删除App"

}

}

}

❈ ❈ ❈

相关文章

✧ ✧ ✧
Skypark澳門旅遊塔
体育直播365下载

Skypark澳門旅遊塔

📅 09-14 👁️ 1445
[闲聊][Mc小杂谈](可挖坟)大家第一次玩mc都是怎么毕业的
小米4還能用多久?盤點其使用壽命背後的因素