工作流(activiti7)-简单的介绍和使用(二)
工作流(activiti7)教程-简单的介绍和使用(一)
工作流(activiti7)教程-简单的介绍和使用(二)
工作流(activiti7)-进阶使用(流程实例,个人任务,组任务)(三)
工作流(activiti7)-进阶使用(流程变量,网关,监听器,拦截器)(四)
工作流(activiti7)-进阶使用(子流程CallActivity详细使用)(五)
目录
工作流:
1.1环境搭建
1.2添加依赖
1.3添加数据库
1.4流程图介绍和使用
1.5部署流程定义
1.6启动流程实例
1.7流程定义查询
1.8任务处理
1.9任务查询
1.10 历史查询
1.11删除流程定义
工作流:
1.1环境搭建
建好项目后新建activiti.cfg.xml配置文件这个名字是默认名字,加载默认配置文件,修改名字就需要手动代码加载了
本地新建数据库,名字activiti,随便起。。。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contex http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!--数据源配置dbcp--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/activiti" /><property name="username" value="root" /><property name="password" value="root" /></bean><!--activiti单独运行的ProcessEngine配置对象(processEngineConfiguration),使用单独启动方式默认情况下:bean的id=processEngineConfiguration--><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!--代表数据源--><property name="dataSource" ref="dataSource"></property><!-- <property name="jdbcDriver" value="com.mysql.jdbc.Driver" /><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti" /><property name="jdbcUsername" value="root" /><property name="jdbcPassword" value="root" />--><!--代表是否生成表结构--><property name="databaseSchemaUpdate" value="true"/></bean>
</beans>
1.2添加pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.wsj.activiti</groupId><artifactId>activiti</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>6</source><target>6</target></configuration></plugin></plugins></build><properties><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version></properties><dependencies><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti.cloud</groupId><artifactId>activiti-cloud-services-api</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- log end --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><!--文件读写操作--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.0</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>5.22.0</version><scope>compile</scope></dependency><!-- <dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>5.22.0</version><scope>compile</scope></dependency>--></dependencies><repositories><repository><id>alfresco</id><name>Activiti Releases</name><url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url><releases><enabled>true</enabled></releases></repository></repositories></project>
1.3添加数据库和介绍
两种;
一:拷贝源码中的数据库
二:代码动态生成(本教程采用方式)
@Testpublic 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;@Beforepublic void init(){//默认方式拿到流程引擎,配置文件名字必须是"activiti.cfg.xml。。pe = ProcessEngines.getDefaultProcessEngine();System.out.println("初始化了");}
@Testpublic 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启动流程
@Testpublic void test2() {// 部署查询对象----查询部署表act_re_deployment,也就是流程列表。。ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
// query.orderByDeploymenTime().desc();query.latestVersion();List<ProcessDefinition> list = query.list();for (ProcessDefinition processDefinition : list) {System.out.println(processDefinition.getId()+"-------"+processDefinition.getName());}}@Testpublic 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任务处理
流程启动了。到第一个任务了,也就是张三请假。。所以需要张三来处理下,也就是提交请假申请。。
@Testpublic void test4() {//查询指派人下的任务TaskQuery taskQuery = pe.getTaskService().createTaskQuery();
// String assignee = "张三"; 指定人就是当前人下的任务,不指定人就是所有任务
// taskQuery.taskAssignee(assignee);taskQuery.orderByTaskCreateTime().desc();List<Task> 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);}}@Testpublic void test5() {//执行任务String taskId = "2505";pe.getTaskService().complete(taskId);}
先查询任务列表
更具查询的id执行任务。。
这样张三的流程就处理完了,目前任务到了李四审批那里
1.9任务查询
上面已经写了,这里再写一次李四的信息
先查询列表,发下变成了李四了。。然后执行。。这样整个任务就执行结束了。。。。
流程执行结束了,,,查看并分析数据库。。。。
任务跑完了。。。这样act_ru的表数据都没有了。。。
这个表存储的漱所有节点信息,上面有介绍。。。开始-任务-结束都有
任务历史记录,,只有两个任务。。。
流程定义,真个过程就是一个流程图。。所以就一条数据。。。。
1.10 历史查询
@Testpublic void testHistoric01(){HistoryService historyService = pe.getHistoryService();HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery();
// query.processInstanceId("2501");可以根据id筛选。。List<HistoricActivityInstance> 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删除流程定义
@Testpublic void deleteDeployment() {// 流程部署idString deploymentId = "1";// 通过流程引擎获取repositoryServiceRepositoryService repositoryService =pe.getRepositoryService();//删除流程定义,如果该流程定义已有流程实例启动则删除时出错repositoryService.deleteDeployment(deploymentId);//设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式,如果流程// repositoryService.deleteDeployment(deploymentId, true);}
部署流程的时候id为1.。根据act_re_deployment表删除,这样其他表的数据也会全部删除。。。就不截图数据库了。。表已经清空了。。。
代码地址;https://github.com/itwsj/activitidemo
工作流(activiti7)-简单的介绍和使用(二)相关推荐
- 初识flowable工作流-实现简单请假流程SpringBoot+VUE
一.前言 大家好,因为目前手里需要用到flowable工作流,之前没有接触过,所以在这里记录一下学习的进度,开始后台使用SpringCloud分布式框架和前端Vue框架实现一个简单的请假流程. 二.代 ...
- .net之工作流工程展示及代码分享(二)工作流引擎
在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: 1 [Serializable] 2 public class Flow 3 ...
- eve模拟器华为镜像_EVE-NG简单入门介绍
此篇文章简单的介绍下模拟器EVE-NG的使用,具体包括Dynamips设备导入与运行,IOL设备的导入与运行,QEMU设备的导入与运行,客户端软件的安装,物理网络与虚拟网络的结合等. 一.导入镜像 D ...
- 从Client应用场景介绍IdentityServer4(二)
从Client应用场景介绍IdentityServer4(二) 原文:从Client应用场景介绍IdentityServer4(二) 本节介绍Client的ClientCredentials客户端模式 ...
- ZAM 3D 制作简单的3D字幕 流程(二)
ZAM 3D 制作简单的3D字幕 流程(二) 原文:ZAM 3D 制作简单的3D字幕 流程(二) 原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表 ...
- python dataframe去掉索引_python中pandas.DataFrame(创建、索引、增添与删除)的简单操作方法介绍...
这篇文章python中pandas.DataFrame(创建.索引.增添与删除)的简单操作方法介绍,其中包括创建.索引.增添与删除等的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看 ...
- 手势识别(一) - 项目概述与简单应用介绍
我公司的科室开始在公众号上规划一些对外的技术文章了,包括实战项目.模型优化.端侧部署和一些深度学习任务基础知识,而我负责人体图象相关技术这一系列文章,偶尔也会出一些应用/代码解读等相关的文章. 文章在 ...
- 易支付接口码支付个人免签源码开源版下载(简单的介绍)
简单的介绍一下什么是个人免签,就是吧自己的微信或者支付宝收款码收款,系统会完成回调的动作的系统 说个人免签支付系统不如说他是一个回调系统,系统检查到个人收款码有进账就会通知到站点,完成回调的动作 免签 ...
- Python制作一个简单的抽奖软件(二)
Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
本文转载于:https://github.com/Freelander/Android_Data/blob/master/Android-Librarys-Top-100.md 本项目主要对目前 Gi ...
最新文章
- 《数学之美》第11章 如何确定网页和查询的相关性
- java 线程的几种状态(转载)
- 可以替代Viso的小巧开源工具DIA。
- python计算短时自相关函数 音频信号_librosa与python_speech_features
- 要养成良好的书写SQL的习惯
- 「本地搭建」worpress博客系统
- 2018美赛D翻译从汽油驾驶到 E 驾驶( E 指电,而不是空)
- 中国百家姓氏图腾大全
- 知识点滴 - 什么是彩票
- debian 网络代理_Debian系统代理服务器安装及配置
- 个人收藏机器学习教程
- 跳房子(二维表上的搜索)
- canva画图 图片居中裁剪_html5 canvas 自定义画图裁剪图片
- 给定一个 n X n 的矩阵,求它的转置矩阵
- 基于MATLAB的隐函数与三维画图(附图与代码)
- 消防管道标志色号_消防标志的起步问题
- css 画一条竖线 或横线
- 语法树的Java代码自动化插桩
- IT项目经理必备的五种能力
- python 机械臂控制_机械臂正运动学-DH参数-Python快速实现
热门文章
- CAD迷你画图2019破解补丁|CAD迷你画图2019r3注册机下载
- at89c51编程语言,(最新整理)AT89C51单片机简介
- 电机瞬态过程分析的MATLAB建模与仿,电机瞬态过程分析的MATLAB建模与仿真
- 以下可以作为C语言标识符的是( ),天津市计算机二级C语言选择题
- 话说软件详细设计工具
- 基于电能计量芯片HLW8012的应用研究
- OpManager12——一个完整的网络管理解决方案
- 17个值得收藏的国内外短信接码平台合集
- Qt文档阅读笔记-QCustom3DLabel使用及Q3DSurface基本信号
- UML期末大作业——《UML系统分析与设计》