Activiti7核心:

一个插件,

一个引擎,

一个xml文件(springboot直接在yml中配置,不需要额外的xml文件),

常用5个service:

RepositoryService    activiti的资源管理类

RuntimeService       activiti的流程运行管理类  

TaskService          activiti的任务管理类           

HistoryService       activiti的历史管理类           

ManagerService       activiti的引擎管理类         

一、 什么是工作流

  以请假为例,现在大多数公司的请假流程是这样的

  员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑

  采用工作流技术的公司的请假流程是这样的

  员工使用账户登录系统——点击请假——上级登录系统点击允许

  就这样,一个请假流程就结束了

  有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案是,用的。但是这一切的工作都会在上级点击允许后自动运行!

  这就是工作流技术。

  Georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完
  
  
二、 工作流技术的优点
  
  从上面的例子,很容易看出

  工作流系统,实现了工作流程的自动化,提高了企业运营效率、改善企业资源利用、提高企业运作的灵活性和适应性、提高量化考核业务处理的效率、减少浪费(时间就是金钱)。

  而手工处理工作流程,一方面无法对整个流程状况进行有效跟踪、了解,另一方面难免会出现人为的失误和时间上的延时导致效率低下,特别是无法进行量化统计,不利于查询、报表及绩效评估。

三、 Java开发者会为什么要学Activity工作流
  
  在Java领域,JBPM和Activity是两个主流的工作流系统,而Activity的出现无疑将会取代JBPM(Activity的开发者就是从Jbpm开发者出来的)。

四、 Activity工作流学习要点

  1、1个插件

  在Eclipse中安装Activity插件actiBPM,绘制Activity工作流图(建模语言BPMN)

        创建bpmn文件,在resources目录下,创建一个新的目录processes,用来放置bpmn文件,springboot就可以自动部署Activiti7流程。创建一个简单的Bpmn流程文件,并设置任务的用户组Candidate Groups。Candidate Groups中的内容与上面DemoApplicationConfiguration类中出现的用户组名称要保持一致,可以填写:activitiTeam 或者 otherTeam。这样填写的好处:当不确定到底由谁来负责当前任务的时候,只要是Groups内的用户都可以拾取这个任务。

Java执行工作流配置的事件 java工作流框架activiti_管理类

  2、1个引擎

  ProcessEngine对象,Activity工作流引擎。这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

  所有的操作都是从获取引擎开始的,所以一般会把引擎作为全局变量,

ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();


Java执行工作流配置的事件 java工作流框架activiti_管理类_02

       3、1个配置文件

  activiti.cfg.xml。Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数,springboot直接在yml中配置,不需要额外的xml文件。

添加yml文件配置:

spring:
  datasource:
    url: jdbc:mysql:///activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  activiti:
    #1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
    #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
    #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
    #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
    database-schema-update: true
    #检测历史表是否存在 activiti7默认没有开启数据库历史记录 启动数据库历史记录,需要手动配置开启
    db-history-used: true
    #记录历史等级 可配置的历史级别有none, activity, audit, full
    #none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
    #activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
    #audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
    #full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
    history-level: full
    #校验流程文件,默认校验resources下的processes文件夹里的流程文件
    check-process-definitions: false

  4、5种数据库表

  Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。用途也和服务的API对应。

  ACT_RE_*: ‘RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。

  ACT_RU_*: ‘RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

  ACT_ID_*: ‘ID’表示identity。 这些表包含身份信息,比如用户,组等等。

  ACT_HI_*: ‘HI’表示history。 这些表包含历史数据,比如历史流程实例,变量,任务等等。

  ACT_GE_*: 通用数据,用于不同场景下,如存放资源文件。
 
  5、25张表

  不同的表存放不同方面的数据,有流程定义表、任务结点表、流程变量表、任务历史表等等。
  
  6、常用5个Service  

service名称           service作用 

RepositoryService    activiti的资源管理类

RuntimeService       activiti的流程运行管理类 

TaskService          activiti的任务管理类 

HistoryService       activiti的历史管理类 

ManagerService       activiti的引擎管理类
RepositoryService : 管理和控制公布包和流程定义(包括了一个流程每一个环节的结构和行为)
的操作
除此之外,服务能够查询引擎中的公布包和流程定义。
暂停或激活公布包。相应所有和特定流程定义。 暂停意味着它们不能再运行不论什么操作了。
激活是相应的反向操作。
获得多种资源,像是包括在公布包里的文件。 或引擎自己主动生成的流程图。
获得流程定义的pojo版本号。 能够用来通过java解析流程。而不必通过xml。
----------------------------------------------------------------
RuntimeService : 负责启动一个流程定义的新实例,获取和保存流程变量,查询流程实例和运行
------------------------------------------------------------------
TaskService : 全部与任务有关的功能

查询分配给用户或组的任务
创建独立执行任务。这些任务与流程实例无关。
手工设置任务的运行者,或者这些用户通过何种方式与任务关联。
认领并完毕一个任务。认领意味着一个人期望成为任务的运行者。 即这个用户会完毕这个任务。
完毕意味着“做这个任务要求的事情”。 通常来说会有非常多种处理形式。
-----------------------------------------------------------------------
HistoryService: 提供了Activiti引擎的全部历史数据
----------------------------------------------------------------------
IdentityService: 管理(创建,更新,删除,查询...)群组和用户
-----------------------------------------------------------------------
FormService: 一个可选服务,这个服务提供了启动表单和任务表单两个概念
---------------------------------------------------------------------------
ManagementService :在使用Activiti的定制环境中基本上不会用到。 它能够查询数据库的表和
表的元数据。另外,它提供了查询和管理异步操作的功能。

  7、7项基本操作

    设计流程图(各种组件,如连线、用户任务、网关)

    流程定义增删改查

    流程变量增删改查

    启动流程定义

    任务增删改查

    完成任务

    历史信息查询

Java执行工作流配置的事件 java工作流框架activiti_spring_03

状态机模式简单工作流实现:

第一种:加一个中间表,记录自己的电子流申请,表中加角色,通过角色去控制。一级一级的审批,生成多个审批记录。

第二种:通过一条记录的状态(“请假单”大致有如下状态:等待项目经理审核、等待部门经理审核、审核结束)来审批,不会同一个电子流,产生多条记录,只有1条记录,状态不同。