Activiti框架的学习笔记

简介:业务流程管理(Business Process Management, BPM

简称工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。

工作流的管理目标:

管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预。

说完工作流,不可避免就要阐述一下工作流框架的概念,工作流框架即用于处理工作流相关问题的框架。常见的工作流框架有:

  1. activiti5.x   / 6.x (可能已经出到了7,有兴趣的可以自行了解)
  2. JBPM4.4
  3. OSWorkflow 

 Activiti: 
activiti是一款BPM的框架,processEngine(业务流程引擎)是activiti的核心,负责流程流程生成的各种数据及实例,监控和管理流程。activiti默认操作是数据库的是mybatis。 
注:工作流activiti的表是管理流程的而业务的数据都需要用户自己创建和维护。 

activiti的7个服务 :

  • RuntimeService:主要与流程实例有关,流程定义是指设计的一个流程,流程实例是指真正的一个事件,比如请假流程是设计的一个流程,小明请假则是一个具体的流程实例。这项服务可以创建一个流程实例,即启动一个流程,中断或者**一个流程实例,以及设置信号事件触发器,消息时间触发器(这些和启动流程的条件有关),设置变量,事件监听等一系列和流程实例有关的操作。 
  • HistoryService:主要是用于查询流程的运行记录,只有查询和删除的操作,没有增加和修改。主要查询活动实例,细节,流程实例,变量实例以及任务实例,对应数据库中相应的表。 
  • IdentityService:主要用于控制用户和用户组,要注意流程引擎本身是没有用户限制的,在用户任务的时候可以指定用户完成,这个不是必须的。这个服务包括用户以及用户组的:创建,保存和删除,以及它们之间的关系,用户详细信息的创建等操作。 
  • TaskService:主要用于流程中的任务节点的相关操作,BPMN实际上有很多种类型的任务,不单单是用户任务,这个的设置主要是针对用户任务的相关设置,其它类型的任务并不需要太多的设置,大部分都是自动类型的任务,需要相应的触发条件。 
  • FormService:主要用于表单数据的保存和获取,有启动流程的表单和任务过程中产生的表单。 
  • ManagementService:这个服务功能比较杂,看里面的方法大致有这些功能:查询数据库表的相关信息,Job相关的查询,删除。还有事件日志的相关操作。总的来说是activiti的一些全局相关的操作。 
  • DynamicBpmnService:这个服务是5.19版本后新增的一个服务,和RepositoryService的作用相似,都是与流程定义有关,但是却完全不同。从名字上来看是动态的BPMN服务,看里面的方法都是改变流程的相关属性。这个方法就可以直接操作流程定义,而不需要读取模型,再设计部署(一个流程基本要经过创建模型,设计画图,生产BPMN的XML文件,再部署成流程定义,这个服务就可以直接操作流程定义,不会改变原本的文件,个人感觉可能会带来一些的问题,但是目前对于流程流转内部实现还没有完全理解,使用要谨慎,比如有的流程正在运行老版本的定义,这个时候改变流程定义,接下来怎么流转之类的都是问题)。 
  • 流程图审批人的设置

本文采用的开发工具为idea

进入正题:

1:打开 idea 创建一个spring boot 项目,依赖选择(lombok,mysql,activiti-6.0(这个版本选5.X也可以),jpa,thymeleaf)

Activiti框架的学习笔记

2:依赖选择好之后导入我们需要的插件--actiBPM

Activiti框架的学习笔记

注意:导入依赖之后需要重启idea,不然依赖可能不生效

3:创建一个test.bpmn (这里的前提是必须导入actiBPM插件,不然找不到bpmn类型的文件)

Activiti框架的学习笔记

4:画一个简单的业务流程图(开始---处理业务---结束)

Activiti框架的学习笔记

5:接下来是配置数据源,打开yml(数据源连接自己定义)

Activiti框架的学习笔记

6:创建数据库(不建表)

Activiti框架的学习笔记

Activiti框架的学习笔记

7:写测试demo

package com.activiti.demo.controller;

import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Auther: lsx
 * @ClassName: DemoController
 * @Description:
 * @Create: 2019/4/1 17:34
 **/
@RestController
public class DemoController {

    @Autowired
    RuntimeService runtimeService;

    @Autowired
    TaskService taskService;

    @GetMapping("/hello")
    String hello(){
        String pid = runtimeService.startProcessInstanceByKey("myProcess_1").getId();
        Task task = taskService.createTaskQuery().processInstanceId(pid).singleResult();
        return "hello world spring boot...." + task.getId();
    }
}

8:打开测试工具测试一下

Activiti框架的学习笔记

9:看下我们的数据库,表都自动创建好了

Activiti框架的学习笔记

数据库简介:


Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。

未完待续..........