工作流(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)-简单的介绍和使用(二)相关推荐

  1. 初识flowable工作流-实现简单请假流程SpringBoot+VUE

    一.前言 大家好,因为目前手里需要用到flowable工作流,之前没有接触过,所以在这里记录一下学习的进度,开始后台使用SpringCloud分布式框架和前端Vue框架实现一个简单的请假流程. 二.代 ...

  2. .net之工作流工程展示及代码分享(二)工作流引擎

    在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: 1 [Serializable] 2 public class Flow 3 ...

  3. eve模拟器华为镜像_EVE-NG简单入门介绍

    此篇文章简单的介绍下模拟器EVE-NG的使用,具体包括Dynamips设备导入与运行,IOL设备的导入与运行,QEMU设备的导入与运行,客户端软件的安装,物理网络与虚拟网络的结合等. 一.导入镜像 D ...

  4. 从Client应用场景介绍IdentityServer4(二)

    从Client应用场景介绍IdentityServer4(二) 原文:从Client应用场景介绍IdentityServer4(二) 本节介绍Client的ClientCredentials客户端模式 ...

  5. ZAM 3D 制作简单的3D字幕 流程(二)

    ZAM 3D 制作简单的3D字幕 流程(二) 原文:ZAM 3D 制作简单的3D字幕 流程(二) 原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表 ...

  6. python dataframe去掉索引_python中pandas.DataFrame(创建、索引、增添与删除)的简单操作方法介绍...

    这篇文章python中pandas.DataFrame(创建.索引.增添与删除)的简单操作方法介绍,其中包括创建.索引.增添与删除等的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看 ...

  7. 手势识别(一) - 项目概述与简单应用介绍

    我公司的科室开始在公众号上规划一些对外的技术文章了,包括实战项目.模型优化.端侧部署和一些深度学习任务基础知识,而我负责人体图象相关技术这一系列文章,偶尔也会出一些应用/代码解读等相关的文章. 文章在 ...

  8. 易支付接口码支付个人免签源码开源版下载(简单的介绍)

    简单的介绍一下什么是个人免签,就是吧自己的微信或者支付宝收款码收款,系统会完成回调的动作的系统 说个人免签支付系统不如说他是一个回调系统,系统检查到个人收款码有进账就会通知到站点,完成回调的动作 免签 ...

  9. Python制作一个简单的抽奖软件(二)

    Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...

  10. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    本文转载于:https://github.com/Freelander/Android_Data/blob/master/Android-Librarys-Top-100.md 本项目主要对目前 Gi ...

最新文章

  1. 《数学之美》第11章 如何确定网页和查询的相关性
  2. java 线程的几种状态(转载)
  3. 可以替代Viso的小巧开源工具DIA。
  4. python计算短时自相关函数 音频信号_librosa与python_speech_features
  5. 要养成良好的书写SQL的习惯
  6. 「本地搭建」worpress博客系统
  7. 2018美赛D翻译从汽油驾驶到 E 驾驶( E 指电,而不是空)
  8. 中国百家姓氏图腾大全
  9. 知识点滴 - 什么是彩票
  10. debian 网络代理_Debian系统代理服务器安装及配置
  11. 个人收藏机器学习教程
  12. 跳房子(二维表上的搜索)
  13. canva画图 图片居中裁剪_html5 canvas 自定义画图裁剪图片
  14. 给定一个 n X n 的矩阵,求它的转置矩阵
  15. 基于MATLAB的隐函数与三维画图(附图与代码)
  16. 消防管道标志色号_消防标志的起步问题
  17. css 画一条竖线 或横线
  18. 语法树的Java代码自动化插桩
  19. IT项目经理必备的五种能力
  20. python 机械臂控制_机械臂正运动学-DH参数-Python快速实现

热门文章

  1. CAD迷你画图2019破解补丁|CAD迷你画图2019r3注册机下载
  2. at89c51编程语言,(最新整理)AT89C51单片机简介
  3. 电机瞬态过程分析的MATLAB建模与仿,电机瞬态过程分析的MATLAB建模与仿真
  4. 以下可以作为C语言标识符的是( ),天津市计算机二级C语言选择题
  5. 话说软件详细设计工具
  6. 基于电能计量芯片HLW8012的应用研究
  7. OpManager12——一个完整的网络管理解决方案
  8. 17个值得收藏的国内外短信接码平台合集
  9. Qt文档阅读笔记-QCustom3DLabel使用及Q3DSurface基本信号
  10. UML期末大作业——《UML系统分析与设计》