Activiti7流程框架基本功能学习
1.整合Activiti7与springboot:
Activiti官网地址
官网给出的pom依赖我们是无法导入的,就算是通过阿里云的镜像也是无法识别的.
但是阿里云的Maven仓库里面是有的,只是名字不同而已,所以我们需要去重新导入这些依赖.并且M5的版本存在一个bug就是每次项目之后都会在 act_re_deployment表里面插入一条数据SpringAutoDeployment ,所以建议大家使用M4的版本
接着我们进入阿里云的Maven仓库,去重新搜索一下这些文件的pom依赖:
activiti-spring-boot-starter的pom依赖:
activiti-dependencies的pom依赖:
之后我们重新引入pom依赖之后可以发现,已经能够正常导入了.
之后我们运行项目可以发现已经自动帮我们创建了一部分的表:
但是呢,这部分的表其实是不全的,我们还需要通过下面的配置创建我们关于历史信息的表:
但是到这里我们还是不够,我们还需要通过下面的SQL脚本创建我们的用户表以及Formdata表:
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- 创建用户表 -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL COMMENT '姓名', `address` varchar(64) DEFAULT NULL COMMENT '联系地址', `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号', `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码', `roles` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '角色', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- 填充用户表 -- ---------------------------- INSERT INTO `user` VALUES ('1', 'admincn', 'beijing', 'admin', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_ADMIN'); INSERT INTO `user` VALUES ('2', 'bajiecn', 'shanghang', 'bajie', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_USER,GROUP_activitiTeam,g_bajiewukong'); INSERT INTO `user` VALUES ('3', 'wukongcn', 'beijing', 'wukong', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_USER,GROUP_activitiTeam'); INSERT INTO `user` VALUES ('4', 'salaboycn', 'beijing', 'salaboy', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_USER,GROUP_activitiTeam'); -- ---------------------------- -- 修复Activiti7的M4版本缺失字段Bug -- ---------------------------- alter table ACT_RE_DEPLOYMENT add column PROJECT_RELEASE_VERSION_ varchar(255) DEFAULT NULL; alter table ACT_RE_DEPLOYMENT add column VERSION_ varchar(255) DEFAULT NULL; -- ---------------------------- -- 动态表单数据存储 -- ---------------------------- DROP TABLE IF EXISTS `formdata`; CREATE TABLE `formdata` ( `PROC_DEF_ID_` varchar(64) DEFAULT NULL, `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `FORM_KEY_` varchar(255) DEFAULT NULL, `Control_ID_` varchar(100) DEFAULT NULL, `Control_VALUE_` varchar(2000) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
运行完我们的脚本文件之后我们就获得了我们所需要的所有的表:
2.Deployment-部署操作:
Deployment主要三个表操作有关,分别是act_re_deployment,act_ge_bytearray和act_re_procdef这三个表,我们再来说说这三个表分别代表以及存储的都是些什么信息
act_re_deployment 该表主要是记录了我们已经部署了那些流程,主要记录部署流程的时间,版本号,名称等等
act_ge_bytearray 该表主要就是记录我们部署流程过程中我们已经上传过的流程文件的数据,并且以二进制的形式保存这些文件
act_re_procdef 该表主要就是记录我们已经部署过的流程的详细信息,主要包括流程的版本号,名称等等
尤其要区别act_re_deployment与act_re_procdef这两个表. act_re_deployment主要是记录 部署流程的过程 的信息,act_re_procdef则是记录 部署的该流程的信息
2.1-Deployment单个文件部署:
测试Activiti7关于bpmn流程文件的部署,编写一个测试类进行测试
@SpringBootTest public class Part1_Deployment { @Autowired private RepositoryService repositoryService; @Test public void initDeploymentBPMN(){ //bpmn文件所在的文件路径 String filename="BPMN/Part1_Deployment.bpmn"; //部署bpmn文件 Deployment deployment=repositoryService.createDeployment() .addClasspathResource(filename) .name("流程部署测试BPMN") .deploy(); System.out.println(deployment.getName()); } }
这样我们的测试代码就已经编写好了,我们执行完成之后我们去查看数据库的这两个表各多了一条数据
一个就是act_re_deployment,代表部署表,表示该文件已经部署在了数据库里面
另一个就是act_ge_bytearray,代表文件表,这个表主要就是存储部署的bpmn文件的实际数据,这里我们是可以通过保存数据的方式查看该bpmn文件的xml数据
这是目前部署bpmn流程文件的方式,但是在此之前的版本中因为 可能不能够直接打开bpmn文件,所以一般部署的时候还会 带上一张bpmn文件的图片即流程图 ,这样就能够方便用户查看流程,所以我们再来看看之前版本部署流程文件时候,是怎么做的.
@SpringBootTest public class Part1_Deployment { @Autowired private RepositoryService repositoryService; @Test public void initDeploymentBPMN(){ String filename="BPMN/Part1_Deployment.bpmn"; String imagename="BPMN/Part1_Deployment.png"; Deployment deployment=repositoryService.createDeployment() .addClasspathResource(filename) .addClasspathResource(imagename) .name("流程部署测试BPMN") .deploy(); System.out.println(deployment.getName()); } }
这时候我们运行完,重新去看看数据库的数据变成什么样了
先是act_re_deployment,我们可以看到又重新部署了一次
再来看看act_ge_bytearray,可以看到多了两条数据,一个就是bpmn流程文件,一个就是我们刚刚定义的png图像文件
这就是之前我们部署bpmn流程文件的方式,但是现在我们就只需要部署bpmn文件即可,之后可以直接通过 将bpmn文件转换成相应的HTML文件展示给用户看.
2.2-Deployment压缩文件部署:
这里我们将上面的文件重命名之后打包成压缩包的形式,看看以压缩文件的形式进行部署是怎么样的.
@Test public void initDeploymentZIP(){ InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("BPMN/BPMN.zip"); ZipInputStream zipInputStream=new ZipInputStream(inputStream); Deployment deployment=repositoryService.createDeployment() .addZipInputStream(zipInputStream) .name("流程部署测试ZIP") .deploy(); System.out.println(deployment.getName()); }
这里我们还是再去看看数据库里面手机怎么添加数据的
先是act_re_deployment,我们可以看到又重新部署了一次
再来看看act_ge_bytearray,可以发现他并不是将整个压缩包保存起来的,而时间压缩包里的文件单个保存的:
2.3-Deployment文件读取:
@Test public void getDeployment(){ List<Deployment> deployments=repositoryService.createDeploymentQuery().list(); for(Deployment deployment:deployments){ System.out.println("ID:"+deployment.getId()); System.out.println("Name:"+deployment.getName()); System.out.println("Time:"+deployment.getDeploymentTime()); System.out.println("Key:"+deployment.getKey()); } }