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官方在 ...
随机推荐
- Delphi的内存管理及内存泄露问题 FastMM4
这几天因为一个程序长时间运行出现比较严重的内存泄露问题,开始关注了一下内存管理方面的东西,以前也注意内存管理,创建了对象及时释放,但总有忘了处理的情况. 在Delphi中没有自动回收机制,所以一定要及 ...
- OpenCV数据结构:CvMat,IplImage,CvArr的应用
最近看HS算法时,发现在新的OpenCV3.0已经移除了该算法,于是不得不看老版的.这其中涉及到了CvMat,CvArr,IplImage的使用.关于这三个结构与Mat的转换关系,总结如下: (1)派 ...
- Linux下网络编程学习杂记
1.TCP/IP协议的体系结构包含四层:应用层(负责应用程序的网络服务,通过端口号识别各个不同的进程)->传输层(传输控制层协议TCP.用户数据报协议UDP.互联网控制消息协议ICMP)-> ...
- var obj = {};var obj2 = [];var obj3;
<script> var obj = {}; console.log(obj); var obj2 = []; console.log(obj2); var obj3; console.l ...
- Java8新特性【转】
地址:http://ifeve.com/java-8-features-tutorial/ 1.简介 毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级,Ja ...
- cookie机制和session机制的原理和区别[转]
一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...
- ASP.NET MVC 之 View 测试
项目又出问题了!手贱了一下,使用某个工具整理了一下 View 中的内容,不经意之间,将 View 的输出中大小写不小心搞错了,导致输出的内容没有办法正常解析. 这种问题太隐蔽了,下次再遇到怎么办呢? ...
- 内网安装ubuntu包
到http://packages.ubuntu.com搜索包下载下来, 再安装.
- vc 递归删除非空文件夹
我觉得这是一个非常不错的递归例子 头文件 #pragma once #include <atlstr.h> #include <io.h> #include <strin ...
- 在 mvc 中使用下拉列表
在mvc中经常会使用到下拉列表,以下以两种方式来实现,一种是以 @Html.DropDownList 扩展方法,一种是以 <select><option></optio ...











































