• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

Activiti 网关

Activiti 网关

Activiti 通常被用来控制流程走向

排他网关(ExclusiveGateway)

排他网关,用来在流程中实现决策; 当流程执行到这个网关,所有分支都会判断条件是否为 true,如果为 true 则执行该分支,

注意:排他网关只会选择一个为 true 的分支执行,如果有两个分支条件都为 true,排他网关会选择id值较小的一条分支去执行

为什么要用排他网关

不用排他网关也可以实现分支,如:在连线的condition条件上设置分支条件;在连线设置 condition 条件的缺点:如果条件都不满足,流程就结束了,不会报错(排他网关是异常结束,会抛出错误),如果从网关出去的线所有条件都不满足则系统抛出异常

org.activiti.engine.ActivitiException: No outgoing sequence flow of the exclusive gateway 'exclusivegateway1' could be selected for continuing the process
   at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivityBehavior.java:85)

流程图应用:

说明:出差天数>=3则总经理审批,出差天数<3则财务审批,二者只能选一

并行网关(ParallelGateway)

并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的:

拆分:并行后的所有外出顺序流,为每个顺序流都创建一个并发分支

合并: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关

注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能, 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支

与其他网关的主要区别是,并行网关不会解析条件, 即使顺序流中定义了条件,也会被忽略

流程图应用:

说明:虽然设置了出差天数>=3项目经理审批,出差天数<3技术经理审批,但是并行网关会忽略条件,两个流程都走,只有两个流程都完成了(技术经理和项目经理都审批了)才会走到下一个流程

包含网关(InclusiveGateway)

包含网关可以看做是排他网关和并行网关的结合体

和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们, 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样

包含网关的功能是基于进入和外出顺序流的:

拆分:所有外出顺序流的条件都会被解析,结果为true的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支

合并:所有并行分支到达包含网关,会进入等待状态, 直到每个包含流程 token 的顺序流分支都到达, 这是与并行网关的最大不同,换句话说,包含网关只会等待被选中执行了的进入顺序流,在汇聚之后,流程会穿过包含网关继续执行

流程图应用:

说明:出差天数>=3项目经理审批,出差天数<3技术经理审批,不管出差多少天人事都要审批,即当项目经理审批+人事审批或者技术经理审批+人事审批流程执行完才能执行下一个流程

总结:

  • 排他网关:解析条件,要不报错,要不执行下一个流程
  • 并行网关:不解析条件,不报错,所有流程都执行
  • 包含网关:解析条件,条件成立的流程执行,不成立就不执行,全都不成立报错

参考文档:https://www.cnblogs.com/wwjj4811/p/16242554.html

记得快乐
posted @ 2020-11-03 16:23  Y-wee  阅读(790)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3