activiti搭建(五)BPMN介绍
转载请注明源地址:http://www.cnblogs.com/lighten/p/5931207.html
对于BPMN我也不是十分清楚,目前也只是因为对于Modeler中不熟悉的组件查询,来对这部分的内容进行学习,不求一次理解,边学边理解吧。所以这一章的介绍会比较简单,但也足够了。
Modeler中的组件列表划分和BPMN的略微有些不同,而且有些内容好像也没有,最后移植到自己的demo中,还遇到了一些问题,如果可能的话,之后会详细介绍一下Modeler的构成,大致是官方文档的第七节Overview以及第十节Process(重要),网上已有人将其归纳总结过了 http://wenku.baidu.com/view/92b1bc06cc17552707220854.html?from=search,可以直接看这个链接中的内容。我下面的是对其与官方文档校对之后的内容,说明这栏没有翻译(太耗时)。
BPMN(Business Process Modeling Notation),业务流程建模与标注,可以用其定义的一系列符号(我称为组件)组成业务流程图。接下来分类别来介绍这些组件。官方网站:http://www.bpmn.org/ 里面有BPMN v2.0的介绍和例子,如果有不懂的可以查看一下。http://www.omg.org/spec/BPMN/2.0/ 文档以及XML校验文件XSD下载地址。这里面才是详细介绍,不过都是英文的,我也懒得看了,只是一些基础应用而已,如果有需要的时候再看。http://www.omg.org/cgi-bin/doc?dtc/10-06-02 这里是官方给的一些例子,教导你如何使用这些组件。
1 流对象(Flow Objects)
流对象是最为基础的概念了,十分重要。
1.1 事件(Events)P271
事件都是用一个圆圈来代表,影响流程的流动,一般有一个原因(trigger)或者一个影响(result)。标准定义了三种事件:开始,中间和结束。从定义和分类名称上来看也能猜到事件的作用了,控制流程的开始,中间流转和结束,这些控制可能采取触发器(trigger)来完成,或者是导致一个结果(结束或抛出)。
(1)开始事件
|
中文 |
英文 |
Trigger |
说明 |
Marker |
| 开始事件 | Start Event | None | ![]() |
|
| 条件开始事件 | Conditional start event | Conditional | ![]() |
|
| 消息开始事件 | Message start event | Message | ![]() |
|
| 多重启动事件 | Multiple start event | Multiple | ![]() |
|
| 多重并行开始事件 | Parallel multiple start event | Parallel Multiple |
![]() |
|
| 信号开始事件 | Signal start event | signal | ![]() |
|
| 定时开始事件 | Timer start event | Timer | ![]() |
| 中文 | 英文 | Trigger | 说明 | Marker |
| 中间事件 | None Intermediate Event | None | ![]() |
|
| 消息事件 | Message Intermediate Event | Message | ![]() |
|
| 定时事件 | Timer Intermediate Event | Timer | ![]() |
|
| 升级事件 | Escalation Intermediate Event | Escalation | ![]() |
|
| 补偿事件 | Compensation Intermediate Event | Compensation | ![]() |
|
| 条件事件 | Conditional Intermediate Event | Conditional | ![]() |
|
| 链接事件 | Link Intermediate Event | Link | ![]() |
|
| 信号事件 | Signal Intermediate Event | Signal | ![]() |
|
| 多重事件 | Multiple Intermediate Event | Multiple | ![]() |
|
| 并行多重事件 | Parallel Multiple Intermediate Event | Parallel Multiple | ![]() |
| 中文 | 英文 | Trigger | 说明 | Marker |
| 结束事件 | None End Event | None | ![]() |
|
| 消息结束事件 | Message End Event |
Message | ![]() |
|
| 错误结束事件 | Error End Event |
Error | ![]() |
|
| 升级结束事件 | Escalation End Event |
Escalation | ![]() |
|
| 取消结束事件 | Cancel End Event |
Cancel | ![]() |
|
| 补偿结束事件 | Compensation End Event |
Compensation | ![]() |
|
| 信号结束事件 | Signal End Event |
Signal | ![]() |
|
| 终止结束事件 | Terminate End Event |
Terminate | ![]() |
|
| 多重结束事件 | Multiple End Event |
Multiple | ![]() |
1.2 活动(Activities)P181
(1)Tasks 任务 P186
task在流程流中是一个原子性的活动,当流程中的作业不能被打断时task被用作一个更细级别的细节。通常,一个终端用户或者应用其执行操作表现为task的形式。task对象在子流程中具有相同的形状,都是长方形有着圆角。
有三种特殊的task图标:循环、多重实例和补偿,一个task可能会有一个或两个这类图标。 
其它的task:
| 中文 | 英文 | 说明 | 图标 |
| 服务任务 | Service Task | ![]() |
|
| 发送任务 | Send Task | ![]() |
|
| 接收任务 | Receive Task | ![]() |
|
| 用户任务 | User Task | ![]() |
|
| 手工任务 | Manual Task | ![]() |
|
| 业务规则任务 | Business Rule Task |
![]() |
|
| 脚本任务 | Script Task | ![]() |
这些任务中,需要人参与自身完成的有Manual Task和User Task。Manual Task是一个不受任何商业流程引擎管理的任务,User Task是。不受管理意味着流程引擎无法追踪其任务的开始和完成。举个例子,这个可能就是一张充满指令的纸,为电话技术人员帮顾客安装电话。
(2)Sub-Processes 子流程 P203
子流程是一个活动的内部细节建模,使用活动、事件和网关以及序列流。子流程是流程内部的一个图形对象,但是它也能够被打开来展现更低一层的流程。子流程定义了一个上下文范围,可用于属性可见性、事务的范围,异常处理,事件或者是补偿。
BPMN定义了五种子流程,其中Collapsed Sub-Process可以被另外四种组合取代。另外四种是loop、multi-instance、Compensation、Ad-Hoc。


下面是一些用法:


(3)Call Activity 调用活动 P213
调用活动确定使用了全局流程或者全局任务的流程中的一点。调用过程用作为包装器来调用全局流程或全局任务执行中。激活调用活动将导致称为全局流程或者全局任务的控制转移。



调用活动必须满足数据要求,同时调用CallableElement返回数据。这意味着在活动的InputOutputSpecification中需要包含这些元素,并且必须精确的和CallableElement的元素匹配。这些元素包括:DataInputs、DataOutputs、InputSets、OutputSets。
1.3 网关(Gateways)P317
网关用于控制序列流如何在一个流程中收敛和发散的交互。如果一个流程不需要控制,那么网关就是非必需的。“网关”一词意味着有一个门机制。允许或不允许通过网关——也就是说,执行到网关的时候,当网关机制被调用,输入可以被合并在一起,或者输出分离成若干部分。
| 中文 | 英文 | 说明 | 图标 |
| 互斥网关 | Exclusive Gateway | ![]() |
|
| 事件网关 | Event-Based Gateway |
![]() |
|
| 并行事件网关 | Parallel Event-Based Gateway |
![]() |
|
| 相容网关 | Inclusive Gateway | ![]() |
|
| 复杂网关 | Complex Gateway | ![]() |
|
| 并行网关 | Parallel Gateway | ![]() |
2 数据(Data)P233
传统的流程建模要求能够模拟物品(物理或信息的)在流程中的创建、操作和执行过程。重要的方面就是能够捕获数据的结构,并且查询或者操作结构。
BPMN本身并不提供内置的模型来描述数据结构或查询数据的语言表达式。相反,它规范hooks来允许使用外部定义的数据结构和表达式语言。此外,在同一个模型中,BPMN允许不同的数据结构和表达式语言。这些语言的兼容性和验证是在规范的范围之外,变成了工具供应商的职责。
BPMN使用XML Schema和XPath作为其默认的数据结构和表达式语言,但是供应商可以自由替换他们自己的语言。
| 中文 | 英文 | 说明 | 图标 |
| 数据对象 | Data Object | ![]() |
|
| 集合型数据对象 | collection DataObject |
![]() |
|
| 数据存储 | Data Store | ![]() |
|
| 输入数据 | Data Input | ![]() |
|
| 输出 | Data Output | ![]() |
3 连接对象(Connecting Objects)P59

4 泳道(Swimlanes)
4.1 池子(Pools)
池是一个容器,与其他的池相隔离。通常用在交互流程中。池主要作用于两个独立的实体或者参与者之间的物理划分。各个池中的活动通常是有自身的流程的。因此,顺序流通常不会越过多个池,而消息流是可以的(这段话摘自:http://wenku.baidu.com/view/59b540d228ea81c758f5783c.html?from=search)


4.2 泳道(Lanes)
Pool的子划分,可以垂直或者水平,用来对活动的组织和分类。Lane更加接近我们传统的泳道的概念。Lane常用来将活动按照角色划分,流程可以在一个pool中跨Lane流转,但是在一个pool中一般不会这样(出处与上面相同)。


5 工件(Artifacts)
5.1 组(Group)
将一部分元素按逻辑或特定目的进行分组,便于查看和管理,用于解释和描述目的,不会影响流程的流转(出处同上)。

5.2 文字注释(Text Annotation)
提供一些附加性的文本信息给流程图的阅读者。

activiti搭建(五)BPMN介绍的更多相关文章
- Activiti搭建
Activiti搭建 前期准备: JDK+Eclipse+Tomcat+Maven的安装与配置 参考:http://blog.csdn.net/zhshulin/article/details/307 ...
- C# 快速开发框架搭建—开发工具介绍
C# 快速开发框架搭建—开发工具介绍 一.VS2013,SQL SERVER R22008 以上两种工具如有不会者自行百度学习下. 二.动软代码生成器 对于经典的三层架构框架来说,使用动软代码生成器会 ...
- 嵌入式框架Zorb Framework搭建五:事件的实现
我是卓波,我是一名嵌入式工程师,我万万没想到我会在这里跟大家吹牛皮. 嵌入式框架Zorb Framework搭建过程 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建.调试输出和建立时间系 ...
- Jmeter环境搭建及目录介绍
Jmeter环境搭建及目录介绍 运行环境:jmeter是基于java语言的,所有需要准备Java的JDK环境,并添加到环境变量中. 一.环境搭建及配置 1.JMeter的下载: 官网:http://j ...
- BBS项目分布搭建五(评论相关功能实现)
BBS项目分布搭建五(评论相关) 1. 根评论逻辑实现 # 在models.py文件中 修改: # 7. 评论表 parent = models.ForeignKey(to='self', null= ...
- activiti搭建(四)八项服务介绍
转载请注明源地址:http://www.cnblogs.com/lighten/p/5927949.html 1.前言 之前学习的时候一直在其它文章看到activiti提供了七个接口来操作工作流,但在 ...
- Activiti第一篇【介绍、配置开发环境、快速入门】
Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开 ...
- Activiti工作流引擎核心介绍
引言 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于 Java 的超快速.超稳定的 BPMN 2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更 ...
- activiti搭建(三)整合Modeler
转载请注明源地址:http://www.cnblogs.com/lighten/p/5878169.html 接上一章,activiti工作流引擎虽然运行了起来,但是什么都没有.activiti官方在 ...
随机推荐
- ios6和ios7禁止屏幕旋转
ios6和ios7禁止屏幕旋转 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOr ...
- R如何检验类别变量(nominal variable)与其他变量之间的相关性
1.使用Pearson积差相关系性进行检验的话可以判断两个变量之间的相关性是否显著以及相关性的强度 显著性检验 (significant test) 连续变量 vs 类别变量 (continuous ...
- grunt构建前端自动化的开发环境
废话不多说.直奔主题. 1.安装node. 别问为什么.如果你不知道,说了你还是不知道. 别问怎么安装,自己去百度. 2.安装grunt_CLI. 安装完node,并且安装成功了,后.下载grunt_ ...
- 《Code Complete》ch.23 调试
WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 ...
- Testlink中分析结果的图表显示乱码
1.下载 tahoma.ttf 字体: 2.下载好后,我们将其放置到,testlink的安装目录的以下文件夹中: testlink/third_party/pchart/Fonts/ 接下来,修改配置 ...
- 软件测试—— junit 单元测试
Tasks: Install Junit(4.12), Hamcrest(1.3) with Eclipse Install Eclemma with Eclipse Write a java pro ...
- 对iframe跨域通信的封装
github源码:https://github.com/boycy815/topProxy 为了偷懒所以依赖了Kissy:http://docs.kissyui.com/ 用法举例:需求是在http: ...
- NSSet、NSMutableSet
NSSet和NSArray功能性质一样,用于存储对象,属于集合:只能添加cocoa对象,基本数据类型需要装箱. NSSet . NSMutableSet是无序的集合,在内存中存储方式是不连续的,而NS ...
- HTTP协议——学习资料小结
嗯,这几天回头再次的学习Servlet的知识点,觉得HTTP协议的内容是相当重要的,现在虽然知道浏览器与应用程序的交互离不开它,但是怎么将信息从浏览器传输到服务器的这个知识点还是一个盲点.于是从网上找 ...
- NOIP1998 拼数
http://www.luogu.org/problem/show?pid=1012 题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,3 ...











































