Activiti与BPMN2.0规范

本章内容根据BPMN2.0规范的分类划分为以下部分:
1.启动与结束事件(event)
2.顺序流(Sequence Flow)
3.任务(Task)
4.网关(Gateway)
5.子流程(Subprocess)
6.边界事件(Boundary Event)
7.中间事件(Intermediate Event)
8.监听器(Listener)

一 启动事件与结束事件

启动事件与结束事件是很重要的一部分,分别负责流程的开始与结束
图例:


结束事件
启动事件
1.1 启动事件

启动事件又分为:
空启动事件
定时启动事件
异常启动事件
1、空启动事件

<startEvent id="startevent" name="开始"></startEvent>

以上XML表示一个空启动事件,由于startEvent标签内没有任何元素定义,因此表示一个空启动事件

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

2.定时启动事件
定时启动事件可以用于一次性定时启动,也可以用于特定时间定时启动

定时启动事件

<startEvent id="timerstartevent1" name="Timer start">
<timerEventDefinition></timerEventDefinition>
</startEvent>

以上XML就表示一个空定时启动事件

属性名称 属性说明
timeDate 一次性定时启动,具体到一个日期
timeDuration 设置多长时间之后启动流程
timeCycle 周期性启动任务,用来设定循环的时间间隔,表示多长时间执行一次循环

3.异常启动事件
异常启动事件可以出发一个异常子流程,但不能通过API方式启动,总是在另外一个子流程抛出异常结束事件的时候被触发
异常启动事件"捕获型",而异常结束事件是抛出型的

异常启动事件

<endEvent id="errorendevent1" name="ErrorEnd">
<errorEventDefinition></errorEventDefinition>
</endEvent>

以上XML就表示一个空定时启动事件

4.消息启动事件
消息启动事件可以通过一个消息名称触发,从而启动一个流程实例,还可以结合消息抛出事件一起使用

消息启动事件
1.2 结束事件

结束事件又分为:
空结束事件
异常结束事件
取消结束事件

1.空结束事件
结束事件是抛出型的。空结束事件不处理抛出结果,空结束事件一般用于正常结束流程

空结束事件

2.异常结束事件
异常结束事件时有抛出结果的,它定义了需要抛出的错误代码,如果找到了异常开始事件定义的异常代码,则会触发异常开始事件,否则按照空结束事件处理

异常结束事件

3.终止结束事件
他可以终止一个流程实例的执行

终止结束事件

4.取消结束事件
取消结束事件可以取消一个事务子流程的执行,同时也能在子流程中使用,
当子流程在执行过程中出现异常时,可以设置一个取消结束事件

二 任务

任务时流程中重要的组成部分,可分为:
用户任务
脚本任务
WebServices任务
业务规则任务
邮件任务
Mule任务
Camle任务
手动任务
JavaService任务
Shell任务

2.1 用户任务

用户任务

<process id="myProcess" name="My process" isExecutable="true">
<userTask id="usertask1" name="User Task"></userTask>
</process>

以上XML定义了一个用户任务

属性名称 属性说明
activiti:assignee 用来指定用户任务的处理人
activiti:cadidateUsers 用来指定用户任务的候选人,多个用逗号隔开
activiti:cadidateGroups 用来指定多个候选组,多个用逗号隔开
activiti:dueDate 设置任务的到期日,通常用变量代替而不是设定一个具体的日期
activiti:priority 设定任务的优先级,取值区间[0,100]

2.2 脚本任务
脚本任务可以运行引擎依赖的语言之外的脚本语言

脚本任务
属性名称 属性说明
scriptFormat 用来指定符合规范的脚本类型
activiti:resultvariable 把脚本处理的结果保存到一个变量中
activiti:priority 设定任务的优先级,取值区间[0,100]

2.3 Java Service 任务
JavaService 任务允许指定一个实现了指定接口的java类,或者执行一个表达式,可以把一个结果保存到一个变量中

JavaServices任务
属性名称 属性说明
activiti:class 实现了接口JavaDelegate的Java类
activit:expression 一个表达式
activiti:delegateExpression 实现了指定接口的表达式
activiti:resultvariable 把脚本处理的结果保存到一个变量中

2.4 WebServices 任务
通过WebServices任务可以调用外部的WebServices资源,完成调用只需要一些必须的配置就行

2.5 业务规则任务
业务规则任务可以根据流程变量的值预设的业务规则,就是把业务数据交由规则引擎处理,规则引擎根据不同的业务规则得到最终的结果在返回给调用者

业务规则任务
属性名称 属性说明
activiti:relues 定义规则的名称,多个用逗号隔开
activit:ruleVariablesInput 业务规则需要的 数据源使用${fooVar方式定义,多个用逗号隔开}
activit:ruleVariablesName 规则执行结果变量,变量的值为ruleVariablesInput定义的变量集合
activiti:execlude 用来设置是否排除某些规则

2.6 邮件任务
邮件任务可以通过Activiti发送邮件,其中邮件的信息通过变量的方式传递

邮件任务
属性名称 是否必须 描述
mailServerHost 邮件任务的主机名,默认为host
mailServerPost 是,如果不是默认的端口 默认为25,如果是使用SSL则为465
mailServerDefaultFrom 发件人email,如果不设置默认为:activiti@activiti.org
mailServerUsername 否,是否需要认证设置 邮件服务认证账号
mailServerPassword 否,是否需要认证设置 邮件服务认证密码
属性名称 属性说明
to 必填,收件人,多个收件人用逗号隔开
from 邮件发送人地址,如果不设置则使用mailServerDefaultFrom属性指定的发件人
subject 发件人email如果不设置,默认为activiti@activiti.org
cc 抄送人列表
bcc 密送人列表
charset 邮件内容字符集,建议使用UTF-8
text 纯文本内容的邮件内容
html html格式的邮件内容

三 网关

网关用于控制流程的走向,可分为:
排他网关
并行网关
包容网关
事件网关
3.1 排他网关
排他网关用来对流程中的决定进行建模,流程执行到该网关时,按照输出流的顺序逐个计算,当条件计算结果为true时,继续执行,如果多个线路的计算结果都为true时,那么只会执行第一个值为true的网关

排他 网关

3.2 并行网关
并行网关用来对并发的任务进行流程建模,并行网关的任务取决于输入,输出顺序流
拆分:并行执行所有的输出输入顺序流,并且为每一条顺序流创建一个并行执行线路
合并:所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行

并行网关

3.3包容网关
包容网关融合了排他网关和并行网关的特性,包容网关既可以同事执行多条线路。有允许在网关上设置条件,也分为拆分与合并

包容网关

3.4 事件网关
事件网关是专门为中间捕获事件设置的,它允许多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后流程处于等待的状态,因为中间等待事件需要依赖中间抛出事件触发

事件网关

四 子流程

把一切需要处理的任务归结到一起作为作为一个大流程的一部分,因为子流程嵌入在主流程中,所有也叫"嵌入式子流程"
子流程限制:
只能包含一个空启动事件
至少有一个结束事件
在子流程中不能把输出流设置到子流程之外的活动上

4.1 调用活动
调用活动解决的问题是流程的通用性,和子流程一样只不过表现的方式不同而已

调用活动
属性名称 属性说明
calledElement 流程的ID对应的流程应该独立存在
activiti:in 调用外部流程时传入的变量,被调用活动需要获取主流的信息
activiti:out 调用活动完成后的结果

五 监听器

在Activiti 中开发人员可以通过配置监听器的方式监听各种动作,例如流程 的启动,结束,创建,任务的完成
监听器分为两类:执行监听器和任务监听器

执行监听器可以捕获的事件如下:
流程实例的启动,结束
输出流的捕获
活动的启动,结束
路由开始,结束
中间事件开始,结束
触发开始事件,触发结束事件

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
public class ExecutionListenerForFlow implements ExecutionListener{
@Override
public void notify(DelegateExecution delegate) throws Exception {
}
}

任务监听器相对于执行监听器的使用范围要小的多,因为它只适用于用户任务,用来监听3钟事件
create:在任务被创建且所有的任务属性设置完成后才触发
assignment:在任务被分配给某个办理人之后触发
complete:在配置了监听器的上一个任务完成时触发

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class ExecutionListenerForFlow implements TaskListener{
@Override
public void notify(DelegateTask arg0) {
// TODO Auto-generated method stub
}
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容