Activiti 实战笔记

《Activiti 实战》 闰洪磊著.北京:机械工业出版社, 2014

认识Activiti

业务流程由多个环节串联起来并且每个环节被赋予任务,而每个任务又可以分为多个活动。

工作流基础

BPM 是Business Process Management 的缩写,中文含义是业务流程管理,是一套达成企业各种业务环节整合的全面管理模式。BPM 是为了实现一定的经营目的而执行的一系列逻辑相关的活动的集合。

BPM 包含两个方面的意思:管理规范软件工程

抽象业务流程( Abstract Business Processes ),包含更高级别有价值的信息而不包括不必要的细节。

工作流生命周期

  1. 定义: 工作流生命周期总是从流程定义开始。此阶段的任务主要是收集业务需求并转化为流程定义。一般由业务需求人员进行,然后交由开发人员加工转化为计算机可以识别的流程定义。
  2. 发布:由开发人员打包各种资源,然后在系统管理(平台)中发布流程定义。在具体的流程引擎中包括流程定义文件( bpmn20.xml 结尾) 、自定义表单、任务监昕类。
  3. 执行:具体的流程引擎按照事先定义的流程处理路线以任务驱动的方式执行业务流程。
  4. 监控:此阶段是依赖执行阶段。业务人员在办理任务的同时收集每个任务(Task) 的结果,然后根据结果做出相应处理.
  5. 优化:根据整个流程的运行过程结果分析问题的根源,然后在此基础上进一步改进,并再次开始一个新的周期。

BPMN

Business Process Modeling Notation ,简称BPMN ,业务流程建模标注

BPMN 定义了业务流程图,其基于流程图技术,同时对创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图, 包括活动(也可以说工作)和定义操作顺序的流控制

BPMN 2.0 规范重点聚焦在如何执行语义和一个被业界认可的通用交换格式

基于BPMN 2.0 的流程建模不仅在流程设计器上可以通用,还可以在任何符合BPMN 2 .0 规范的流程引擎上执行

引擎Service 接口

Activiti 引擎提供了七大Service 接口, 均通过ProcessEngine 获取,并且支持链式API 编程风格:

Service 接口作 用
RepositoryService用于管理流程仓库,例如,部署、删除、读取流程资源
IdentifyService可以管理和查询用户、组之间的关系
RuntimeService可以处理所有正在运行状态的流程实例、任务等
TaskService用于管理、查询任务,例如,签收、办理、指派等
FormService用于读取和流程、任务相关的表单数据
HistoryService可以查询所有历史数据,例如,流程实例、任务、活动、变
ManagementService和具体业务无关,主要是可以查询引擎配置、数据库、作业等

Activiti 与BPMN 2.0 规范

启动事件与结束事件

  • 开始事件均以细线圆形为基础。
  • 结束事件均以粗线圆形为基础

启动事件

每个流程总是以启动事件作为入口。

  • 启动事件
  • 定时启动事件
  • 异常启动事件

启动事件都是“捕获型” 的,等待第三方触发后(观察者模式)才可以启动。在Activiti 中可以通过调用API 触发启动事件。

空启动事件

<startEvent id="startEvent" name="Start event"></startEvent>

startEvent 表示一个启动事件,由于startEvent 标签中没有任何其他的元素定义, 所以称之为空启动事件.

Activiti扩展的空启动事件属性:

属性名属性说明
activiti:formKey可以用来指定空启动事件关联的表单文件。
activiti:initiator可以用来记录启动流程的人的ID ( 也可以是用户的名称),启动流程之后此属性指定的变量就会自动设置当前人的名称

启动事件可以配置表单:外置表单和动态表单。

  • 外置表单: 表单内容存放在一个单独的“ . form ”文件中,可以是任何文本字符,一般用HTML 书写,并且可以使用UEL占位符以达到动态填充的目的。启动事件中的activiti:formKey 属性用来指定使用哪个表单文件。

  • 动态表单:此类表单是在流程定义文件中设置表单中元素集合,包含各种输入框、下拉框等。对应的XML 标示如下:

    <activiti:formProperty id= "name" name= "Name" type= "string" ></activiti:formProperty>

    activiti:formProperty 可以有多个.

定时启动事件

可用于一次性定时启动、特定时间间隔后启动,用于定期循环流程或一次性流程. 在BPMN 2.0 规范中用一个形象的钟表图形表示.

<startEvent id="timerStartEvent" name="Timerstart event for report process" >
<timerEventDefinition>
<timeCycle>R1/2012-02-01T00:00/PM1M</timeCycle>
</timerEventDefinition>
</startEvent>

可以通过多种方式设置定时事件:

  • timeDate: 一次性定时启动,具体到一个日期,用ISO 8601 格式
  • timeDuration: 设置多长时间之后启动流程
  • timeCycle:周期性启动任务,用来设定循环的时间间隔,表示多长时间执行一次循环。ISO 8601
异常启动事件

可触发一个异常子流程,但是不能通过API方式启动,它总是在另外一个流程抛出异常结束事件的时候被触发。

异常启动事件是“捕获型“,而异常结束事件是“抛出型”:异常结束事件对应throw ,而异常启动事件是catch 。在BPMN 2.0 规范中catch 需要两者的错误信息匹配才能决定是否触发异常启动事件。

异常启动事件的图形化表示是在空启动事件基础上嵌套了一个雷电符号。异常启动事件必须嵌套在一个事件子流程(EventSubProcess)中。

<subProcess id="eventsubprocess1" name="Event sub Process" triggeredByEvent="true">
<startEvent id="errorstartevent1" name="Error start">
<errorEventDefinition errorRef="AIAOO1" ></errorEventDefinition>
</startEvent>
...
</subProcess>

BPMN 2 . 0 中的异常仅仅描述异常定义及处理方式。

消息启动事件

可通过一个消息名称触发,从而启动一个流程实例;还可以结合消息抛出事件一起使用,由流程自动根据消息的名称启动对应的流程。

借助这个功能在实际应用中可以为不同的业务处理结果启动不同的流程

消息启动事件的图形化表示是在空启动事件的基础上嵌入一个空心的信封图标。

<message id="reSendFile" name="重新发送文件" />
...
<startEvent id="messagestart" >
<messageEventDefinition messageRef="reSendFile" />
</startEvent>

可通过Activiti 提供的API 触发消息启动事件,如runtimeService.tartProcessInstanceByMessage("重新发送文件")

或以消息启动事件为入口,使用runtimeService的startProcesslnstanceByKeystartProcessInstanceByld 方法

结束事件

在定义流程时也允许没有结束事件(但是开始事件不可缺少)。结束事件在BPMN 2.0 规范中用一个线条加粗的圆形表示。结束事件表示流程(包含子流程)的结束。

结束事件总是抛出型的,当流程执行到结束事件时会抛出一个执行结果。

  • 结束事件:空结束事件不处理抛出结果,用于正常结束流程

  • 异常结束事件:有抛出结果。它定义了需要抛出的错误代码,如果找到了异常开始事件定义的异常代码,则会触发异常开始事件,否则按照空结束事件规则处理。异常结束事件的错误代码不能为空。在空结束事件的基础上添加了一个雷电符号

    <endEvent id="endevent1" name="ErrorEnd">
    <errorEventDefinition errorRef="AIA-001"></errorEventDefinition>
    </endEvent>
  • 取消结束事件: 可取消一个事务子流程的执行, 同时也只能在子流程中使用. 还可以和取消边界事件 配合使用针对取消操作做后续处理。图形表示是在空结束事件基础上嵌入一个“ X ”图形.

    <endEvent id="myCancelEndEvent">
    <cancelEventDefinition/>
    </endEvent>
  • 终止结束事件: 终止结束事件结束的是整个流程实例。在空结束事件的基础上添加了一个实心的圆点.

    <endEvent id="terminateendevent1" name="TerminateEndEvent">
    <terminateEventDefinition></terminateEventDefinition>
    </endEvent>

顺序流

顺序流是两个模型之间的连接者。如果一个元素在流程执行期间被访问, 流程会沿着该元素所有输出顺序流继续执行。这意味着BPMN 2.0 默认行为是并行的:多个输出顺序流会创建多条独立、并行的执行路径。

文章目录
  1. 1. 认识Activiti
    1. 1.1. 工作流基础
      1. 1.1.1. 工作流生命周期
      2. 1.1.2. BPMN
      3. 1.1.3. 引擎Service 接口
    2. 1.2. Activiti 与BPMN 2.0 规范
      1. 1.2.1. 启动事件与结束事件
        1. 1.2.1.1. 启动事件
          1. 1.2.1.1.1. 空启动事件
          2. 1.2.1.1.2. 定时启动事件
          3. 1.2.1.1.3. 异常启动事件
          4. 1.2.1.1.4. 消息启动事件
      2. 1.2.2. 结束事件
    3. 1.3. 顺序流
|