概述

BPMN 2.0是什么呢?业务流程模型注解(Business Process Modeling Notation - BPMN)是 业务流程模型的一种标准图形注解。这个标准 是由对象管理组(Object Management Group - OMG)维护的,BPMN2规范定义了非常丰富的语言,为建模和执行业务流程。

其中BPMN2.0中网关是工作流引擎中重要的一个路径决策,网关是用来控制流程中的流向的。更确切的是, 当一个token(BPMN 2.0中execution的概念注解)到达一个网关, 它会根据网关的类型进行合并或切分,网关描绘成一个菱形,使用一个内部图标来指定类型 (排他,并行,多路等等)。

F2BPM工作流引擎自主研发中使用并应用遵循了BPMN2.0和WFMC的规范参考。同时在此指导的规范的基础上梳理并发展了如下的网关类型,更加贴切中国人自己的使用习惯和有更多的引擎流转处理能力。本文也是对BPMN2.0网关的一个总结,提供给有兴趣的人员作为参考。

1 排他网关

排他网关(也叫异或网关), 用来在流转中实现发散分支决策。 当流程执行到这个网关,所有流出的迁移线都会被求解计算一遍。 其中第一条条件解析为true迁移线会被选中(当多个条件为true时,第一个决策被执行)并且不再计算其它流出分支,让流程沿着第一条被选中的迁移线运行;如果没有任何一条流出分支可执行,则抛出异常,中断执行,在流程设计时应该避免这种情况的发生,至少需要确保有一条分支的计算结果为true。

2 多路网关

多路网关(也叫或网关,也称为发散网关),用来在流转中实现发散分支决策。 当流程执行到这个网关,与排他网关类似,区别在于发散网关将所有外出的分支迁移线都会被求解计算一遍。 其中条件解析为true迁移线会被选中,让流程沿着所有被选中的迁移线并行运行。如果没有任何一条流出分支可执行,则抛出异常,中断执行,在流程设计时应该避免这种情况的发生,至少需要确保有一条分支的计算结果为true。

3 并行网关

并行网关, 用来在流转中实现无条件的聚合分支决策和发散分支决策。当流程执行到这个网关,所有流出的迁移线条件都会被忽略,只有全部流入的分支都到达时才会触发发散分支行为。所有流出的迁移线都会被选中。让流程沿着所有流出的迁移线并行运行。

4 并行开始网关

并行开始网关是并行网关的独立拆分,只是并行开发网只有发散行为,用来在流转中实现无条件的发散分支决策。当流程执行到这个网关,所有流出的迁移线条件都会被忽略,所有流出的迁移线都会被选中。让流程沿着所有流出的迁移线并行运行。

5 并行结束网关

并行结束网关, 是并行网关的独立拆分,只是并行结束网只有聚合行为,用来在流转中实现无条件的聚合分支决策。当流程执行到这个网关,所有流入的迁移线条件都被要求流入,当全部流入的分支都到达时才会触发发散分支行为。

6 复杂网关

复杂网关,复杂网关是聚合网关与发散网关的综合体,用来在流转中实现条件的多路聚合分支决策和多路发散分支决策。当流程执行到这个网关,根据所设定聚合规则进行聚合计算,当聚合完毕触发发散动作,所有流出的分支迁移线条件都会被求解计算一遍。 其中条件解析为true迁移线会被选中,让流程沿着所有被选中的迁移线并行运行。如果没有任何一条流出分支可执行,则抛出异常,中断执行,在流程设计时应该避免这种情况的发生,至少需要确保有一条分支的计算结果为true。

只有全部流入的分支都到达时才会触发发散分支行为。

7聚合网关

聚合网关, 用来在流程中实现聚合决策。 当流程执行到这个网关,根据所设定的聚合规则进行计算,当聚合完毕时触发流转到下一节点。聚合规则可以是并行结束行为,也可以是多重聚合行为,或者多路聚合行为。

8 事件网关

事件网关,基于事件网关允许根据事件判断流向,用来在流转中实现异或分支决策。当流程执行到这个网关,网关的每个流出分支都要连接到一个中间捕获事件,网关会进入等待状态:流程会暂停执行。与此同时,会为每个流出分支建相对的事件订阅,当捕获取事件源时触发条件计算,计算结果为ture时分支被选中,其它分支将被忽略,并选取最先被选中的分支执行流转。

9泳道

泳道不影响流程的流转,只是一个对流程节点进行区域划分的流程图展示,便于在流程节点多的流程显示上更上直观明了。F2BPM有两种泳道:

上图中间无虚线分隔的泳道

上图中间有虚线分隔的泳道

上图:流程图中的网关示例

【原创】流程引擎的网关(遵循BPMN2.0)设计总结的更多相关文章

  1. Fixflow引擎解析(二)(模型) - BPMN2.0读写

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  2. Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  3. Fixflow引擎解析(一)(介绍) - Fixflow开源流程引擎介绍

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  4. 基于开源流程引擎开发BPM或OA有哪些难点

    前言     如何基于开源流程引擎开发OA系统?开源流程引擎哪个好?把它整合到自己的产品里难不难,有没有啥风险?这是大家经常遇到的问题.笔者从2006年开始参与流程引擎开发,经历了三代流程引擎研发,支 ...

  5. .NET 开源工作流: Slickflow流程引擎高级开发(八) -- 审批网关(ApprovalOrSplit)模式的应用

    前言:业务流程流转过程中,审批类型的节点是比较常见的,在审批操作中,常见的操作就是就是主管人员对待办事项进行同意或者拒绝.所以网关处理节点,就是需要对这两种审批结果进行预备处理,审批网关是在或分支(O ...

  6. 从零开始学习和改造activiti流程引擎的13天,自己记录一下

    day#1(11.13) 尝试通过spring boot 集成最新版activiti 7,但是苦于官方的文档基本为空,无法完成spring boot的配置,最终按照activiti 6的文档,手工初始 ...

  7. activiti5/6 系列之--Activiti与BPMN2.0规范相关节点对应关系

    根据BPMN2.0规范的分类划分为以下部分: 1.启动与结束事件(event) 2.顺序流(Sequence Flow) 3.任务(Task) 4.网关(Gateway) 5.子流程(Subproce ...

  8. Activiti工作流与BPMN2.0规范

    本章内容根据BPMN2.0规范的分类划分为以下部分: 1.启动与结束事件(event) 2.顺序流(Sequence Flow) 3.任务(Task) 4.网关(Gateway) 5.子流程(Subp ...

  9. BPMN2.0 规范

    1 启动事件 每个流程总是以启动事件作为入口,启动事件在BPMN2.0 中以细线圆圈表示.分为三种类型 空启动事件 定时启动事件 异常启动事件 消息启动事件 启动事件都是等待第三方触发才可以启动. 定 ...

随机推荐

  1. boost::pool 库速记

    使用示例 #include <functional> #include <iostream> #include <boost/pool/pool.hpp> #inc ...

  2. 正则表达式过滤HTML、JS、CSS

    功能用途 主要是用来提取html页面内容时使用. 示例代码 using System; using System.Collections.Generic; using System.Linq; usi ...

  3. 编译安装httpd 2.4

    author:JevonWei 版权声明:原创作品 官方网站下载httpd2.4.apr及apr-util的相关软件包,并传输到centos 7系统中的/usr/local/src(apr1.6版本过 ...

  4. 大数的减法函数--c语言

    代码展示:   http://paste.ubuntu.com/23693598/ #include<stdio.h> #include<stdlib.h> #include& ...

  5. Python中os和shutil模块实用方法集…

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  6. 【Beta阶段】第三次scrum meeting

    Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 打包上传团队代码 100% 查找适合的素材模块,和105一起把手势功能连接 ...

  7. 201521123066 《Java程序设计》第三周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...

  8. 201521123060《Java程序设计》第2周学习总结

    1. 本周学习总结 a.进一步熟悉了Eclipse的使用和java程序的编写: b.学习了java数据的基本类型:整数类型,浮点类型等: c.学习了算数运算符,赋值运算符,位运算符,关系运算符,逻辑运 ...

  9. 201521123071 《JAVA程序设计》第十二周学习总结

    第12周作业-多线程 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件线程相关内容. 2. 书面作业 1. 字符流与文本文件:使用 PrintWriter(写),Buff ...

  10. Java十二周总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...