Activiti

简介

  • 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
    工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。
  • 常见的工作流框架
    Activity5.13、JBPM4.4、OSWorkFlow、WorkFlow
    工作流框架底层需要有数据库提供支持,activiti5.13版本,有23张表。JBPM4.4框架底层有数据库支持,18张表。JBPM底层使用hibernate操作数据库。Activiti框架底层使用的mybatis操作数据库。
  • 安装插件
    解压安装包,复制到eclipse中的dropins目录中
  • 初始化表结构
    • 使用activiti框架提供的建表语句
    • 使用activiti框架的自动建表功能
      不使用配置文件(不推荐使用)
      Activiti
      使用配置文件 要求配置文件名称必须为activiti-context.xml或者activiti.cfg.xml
      Activiti
      Activiti
  • 可以进一步简化
    Activiti
  • 了解23张表
    Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
    • ACT_RE_*: ‘RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
    • ACT_RU_*: ‘RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
    • ACT_ID_*: ‘ID’表示identity。 这些表包含身份信息,比如用户,组等等。
    • ACT_HI_*: ‘HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
    • ACT_GE_*: 通用数据, 用于不同场景下。

使用框架提供的API完成流程操作

  • 部署流程定义
    Activiti
    Activiti
  • 查询部署表
    Activiti
  • 查询流程定义列表
    Activiti
  • 删除部署信息(删除流程定义依赖删除部署信息)
    Activiti
  • 查询一次部署对应的流程定义文件名称和对应的输入流(bmpn png)
    Activiti
    只获取图片文件:
    Activiti
  • 启动流程实例
    根据一个流程定义具体的一次执行过程就是一个流程实例,一个流程定义对应多个流程实例(一对多关系)
    Activiti
    ByKey启动流程(推荐使用。因为他会选择最新版的)
    Activiti
  • 查询流程实例列表
    Activiti
  • 结束流程实例
    Activiti

  • 查询个人任务列表
    Activiti

  • 办理任务
    Activiti
  • 直接把任务向下执行一步
    Activiti
  • 查询最新版本的流程定义列表
    Activiti
  • 查询历史数据查询
    Activiti
    Activiti
    Activiti
  • Activiti框架提供的Service对象
    RepositoryService—-操作静态的资源(流程定义,bpmn、png)
    RuntimeService—–操作流程实例(启动流程实例、查询流程实例、结束流程实例)
    TaskService—–操作任务(查询任务、办理任务)
    HistoryService—-操作历史数据
  • Activiti框架提供的对象(和表有对应关系)
    Deployment—–act_re_deployment
    ProcessDefinition—-act_re_procdef
    ProcessInstance—–act_ru_execution
    Task—–act_ru_task

流程变量

Jdk中提供的数据类型(String、Integer、List 、Map…)
自定义的实体类(要求实现序列化接口)

设置流程变量

  • 在启动流程实例时设置
    Activiti
  • 在办理任务时设置
    Activiti
  • 使用RuntimeService的方法设置
    Activiti
  • 使用TaskService的方法设置
    Activiti

获取流程变量

  • 使用RuntimeService的方法获取
    Activiti
  • 使用TaskService的方法
    Activiti

任务的类型

  • 个人任务
    由某一个负责办理,在任务表中通过assignee字段记录
  • 公共任务(组任务)
    Activiti
    Activiti
    Activiti
  • 接收任务
    接收任务不是由某个人负责办理,通过signal方法让流程执行的
    Activiti

监听器(执行、任务)

  • 执行监听器
    第一步:按照框架的规则编写监听器类
    Activiti
    第二步:设计流程图,注册监听器类
    Activiti
    第三步:启动流程实例,Activiti框架通过反射调用监听器类
  • 任务监听器
    第一步:按照activiti框架的规则编写一个任务监听器类
    Activiti
    第二步:注册监听类
    Activiti
    第三步:办理任务,由框架通过反射调用监听器类

网关(并行、排他)

  • 排他网关
    第一步:设计流程图,使用排他网关
    Activiti
    第二步:执行流程,由框架根据设置的流程变量选择执行其中的一个分支
  • 并行网关
    Activiti