切换菜单
搜索
个人笔记云
首页
java
spring
springmvc
python
使用教程
笔记管理
搜索
登录/注册
好物分享
退出
搜索
工作流(activiti7)-简单的介绍和使用(二)
2021-08-08
974
工作流(activiti7)-简单的介绍和使用(二) -------------------------- [工作流(activiti7)教程-简单的介绍和使用(一)](https://mp.csdn.net/console/editor/html/107599453) [工作流(activiti7)教程-简单的介绍和使用(二)](https://javawsj.blog.csdn.net/article/details/107600428) [工作流(activiti7)-进阶使用(流程实例,个人任务,组任务)(三)](https://blog.csdn.net/onceing/article/details/107674850) [工作流(activiti7)-进阶使用(流程变量,网关,监听器,拦截器)(四)](https://blog.csdn.net/onceing/article/details/107953938) [工作流(activiti7)-进阶使用(子流程CallActivity详细使用)(五)](https://blog.csdn.net/onceing/article/details/108103052) **目录** [工作流:](#%E5%B7%A5%E4%BD%9C%E6%B5%81%EF%BC%9A) [1.1环境搭建](#1.1%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA) [1.2添加依赖](#1.2%E6%B7%BB%E5%8A%A0%E4%BE%9D%E8%B5%96) [1.3添加数据库](#1.3%E6%B7%BB%E5%8A%A0%E6%95%B0%E6%8D%AE%E5%BA%93) [1.4流程图介绍和使用](#1.4%E6%B5%81%E7%A8%8B%E5%9B%BE%E4%BB%8B%E7%BB%8D%E5%92%8C%E4%BD%BF%E7%94%A8) [1.5部署流程定义](#1.5%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B%E5%AE%9A%E4%B9%89) [1.6启动流程实例](#1.6%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B%E5%AE%9E%E4%BE%8B) [1.7流程定义查询](#1.7%E6%B5%81%E7%A8%8B%E5%AE%9A%E4%B9%89%E6%9F%A5%E8%AF%A2) [1.8任务处理](#1.8%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86) [1.9任务查询](#1.9%E4%BB%BB%E5%8A%A1%E6%9F%A5%E8%AF%A2) [1.10 历史查询](#1.10%C2%A0%E5%8E%86%E5%8F%B2%E6%9F%A5%E8%AF%A2) [1.11删除流程定义](#1.11%E5%88%A0%E9%99%A4%E6%B5%81%E7%A8%8B%E5%AE%9A%E4%B9%89) *** ** * ** *** 工作流: ==== ### 1.1环境搭建 建好项目后新建activiti.cfg.xml配置文件这个名字是默认名字,加载默认配置文件,修改名字就需要手动代码加载了  本地新建数据库,名字activiti,随便起。。。 ```
``` ### 1.2添加pom依赖 ```
4.0.0
com.wsj.activiti
activiti
1.0-SNAPSHOT
org.apache.maven.plugins
maven-compiler-plugin
6
6
1.6.6
1.2.12
org.activiti
activiti-engine
7.0.0.Beta1
org.activiti
activiti-spring
7.0.0.Beta1
org.activiti
activiti-bpmn-model
7.0.0.Beta1
org.activiti
activiti-bpmn-converter
7.0.0.Beta1
org.activiti
activiti-json-converter
7.0.0.Beta1
org.activiti
activiti-bpmn-layout
7.0.0.Beta1
org.activiti.cloud
activiti-cloud-services-api
7.0.0.Beta1
mysql
mysql-connector-java
5.1.40
junit
junit
4.12
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
3.4.5
commons-dbcp
commons-dbcp
1.4
commons-io
commons-io
2.0
org.activiti
activiti-spring-boot-starter-basic
5.22.0
compile
alfresco
Activiti Releases
https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/
true
``` ### 1.3添加数据库和介绍 两种; 一:拷贝源码中的数据库 二:代码动态生成(本教程采用方式) ``` @Test public void creatSql() { // 动态创建数据库 ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); ProcessEngine processEngine = configuration.buildProcessEngine(); System.out.println(processEngine); } ``` 运行后生成了数据库。。。。  数据库的介绍:主要分三部分。。。  第一部分:保存了流程图和流程部署定义的数据,每个流程图都存储,待会下边不熟流程会介绍 其中act_re开头代表的Repository,仓库的意思。说白了就是存储实实在在的流程图的相关信息和数据。。 第二部分 act_hi开头。。。history 历史记录。。。各种历史记录。。 第三部分。。act_ru runtime 运行时的数据,,,(临时数据)流程跑完后就自动删除没有了。。。 ### 1.4流程图介绍和使用 现在我们画一个请假流程来介绍:  左侧是每个图标的相关属性,id,名字等,其中有用的是Assignee字段,设置执行人,请假我设置的是张三,经理审批我设置的李四,下边还有其它属性,有多个用户,用户组(比如需要一个项目组的人执行任务),监听器(对任务的监听)等常用操作。这些也都可以通过代码来配置。 ### 1.5部署流程定义 画完流程图,就需要部署了,也就是保存到数据库。。。 现在执行以下代码来部署流程定义 第一步先配置流程引擎对象获取。默认拿到流程引擎对象,全局对象,其它所有操作都需要它 ``` ProcessEngine pe; @Before public void init() { // 默认方式拿到流程引擎,配置文件名字必须是"activiti.cfg.xml。。 pe = ProcessEngines.getDefaultProcessEngine(); System.out.println("初始化了"); } ``` ``` @Test public void test1() { // 部署流程,把画好的流程部署到数据库 DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment(); deploymentBuilder.addClasspathResource("diagram/pro1.bpmn"); deploymentBuilder.addClasspathResource("diagram/pro1.png"); Deployment deployment = deploymentBuilder.deploy(); System.out.println(deployment.getId()); } ``` 控制台打印  刚才说了,流程部署后相关的数据库会在act_re和上面一个个byte数据库存储数据,现在查看。。。  控制台打印的id就是上图表的id,部署id 存储流程的id。和数据。。整个路程的id....  byte表存储流程图和png图片 **1.6启动流程实例** 部署后就可以启动流程了,, 先查询下流程数据然后根据id启动流程 ``` @Test public void test2() { // 部署查询对象----查询部署表act_re_deployment,也就是流程列表。。 ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery(); // query.orderByDeploymenTime().desc(); query.latestVersion(); List
list = query.list(); for (ProcessDefinition processDefinition : list) { System.out.println(processDefinition.getId() + "-------" + processDefinition.getName()); } } @Test public void test3() { // 开启流程 String processDefinitionId = "qjlc:1:4"; ProcessInstance pi = pe.getRuntimeService().startProcessInstanceById(processDefinitionId); // ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(); //多种方式请求 System.out.println(pi.getId()); } ``` 查询流程列表,,,可以看到查询到id和数据库的存储的数据一一对应 根据id启动流程  启动后可以看到有一个2051的id。。。现在去查询数据库。。。  流程实例初始化历史表  当前运行的任务表,现在流程启动的了,到请假申请了。。。  当前任务的执行人信息  执行表,,流程里面画了两个任务,一个请假,一个审批  流程定义历史表,启动流程后走了开始和第一个流程,所以存储了两条数据。。。这里存储的是整个流程所有节点的历史数据  任务历史表,当前走到了第一个任务。。。所以只有一条。。。 ### 1.7流程定义查询 刚才已经查询了一下列表。。。。。参考上面代码 ### 1.8任务处理 流程启动了。到第一个任务了,也就是张三请假。。所以需要张三来处理下,也就是提交请假申请。。 ``` @Test public void test4() { // 查询指派人下的任务 TaskQuery taskQuery = pe.getTaskService().createTaskQuery(); // String assignee = "张三"; 指定人就是当前人下的任务,不指定人就是所有任务 // taskQuery.taskAssignee(assignee); taskQuery.orderByTaskCreateTime().desc(); List
list = taskQuery.list(); for (Task task : list) { String id = task.getId(); String name = task.getName(); String assignee2 = task.getAssignee(); System.out.println(id + "---" + name + "----" + assignee2); } } @Test public void test5() { // 执行任务 String taskId = "2505"; pe.getTaskService().complete(taskId); } ``` 先查询任务列表  更具查询的id执行任务。。  这样张三的流程就处理完了,目前任务到了李四审批那里 ### 1.9任务查询 上面已经写了,这里再写一次李四的信息 先查询列表,发下变成了李四了。。然后执行。。这样整个任务就执行结束了。。。。   流程执行结束了,,,查看并分析数据库。。。。 任务跑完了。。。这样act_ru的表数据都没有了。。。  这个表存储的漱所有节点信息,上面有介绍。。。开始-任务-结束都有  任务历史记录,,只有两个任务。。。  流程定义,真个过程就是一个流程图。。所以就一条数据。。。。 ### 1.10 历史查询 ``` @Test public void testHistoric01() { HistoryService historyService = pe.getHistoryService(); HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery(); // query.processInstanceId("2501");可以根据id筛选。。 List
list = query.list(); for (HistoricActivityInstance ai : list) { System.out.println(ai.getActivityId()); System.out.println(ai.getActivityName()); System.out.println(ai.getProcessDefinitionId()); System.out.println(ai.getProcessInstanceId()); System.out.println("=============================="); } } ``` 查询的是act_hi_actinst 表。。查询出四个节点的数据。。。  ### 1.11删除流程定义 ``` @Test public void deleteDeployment() { // 流程部署id String deploymentId = "1"; // 通过流程引擎获取repositoryService RepositoryService repositoryService = pe.getRepositoryService(); // 删除流程定义,如果该流程定义已有流程实例启动则删除时出错 repositoryService.deleteDeployment(deploymentId); // 设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式,如果流程 // repositoryService.deleteDeployment(deploymentId, true); } ``` 部署流程的时候id为1.。根据act_re_deployment表删除,这样其他表的数据也会全部删除。。。就不截图数据库了。。表已经清空了。。。 代码地址;
**推荐教程:** [**Activiti7精讲Java通用工作流开发实战 : **](http://www.notescloud.top/goods/detail/1140)
教程分类
热门视频教程
热门文章
热门书籍推荐