乐趣区

关于前端:看看CabloyJS工作流引擎是如何实现Activiti边界事件的

CabloyJS 内置工作流引擎的根本介绍

1. 由来

家喻户晓,NodeJS 作为后端开发语言和运行环境,反对高并发、开发效率高,交口称誉,然而大多用于 数据 CRUD 治理 中间层聚合 中间层代理 等工具场景,很少深刻到业务畛域的外围。有许多用 NodeJS 开发的 最小可用产品(MVP)最终会重整旗鼓重构,这是起因之一

究其根源,NodeJS 作为业务开发平台,还短少许多外围的根底构件,NodeJS 工作流引擎 便是其一。CabloyJS 从 4.0 版本起,重点开发了 NodeJS 工作流引擎,并作为内置的根底外围模块(同样是开源、收费),近一步拓展了 NodeJS 在后端的利用场景,为深刻研发各类商业业务逻辑,提供了根底撑持

2. 特点

  1. 更简便的配置:采纳 JSON 进行流程定义的配置,辞别 XML 配置文件的繁杂
  2. 更清晰的架构:基于 分层机制 采纳多个外围模块来搭建工作流引擎的架构,让工作流不再神秘,源码也不再叠床架屋

边界事件的概念与实现

1. Activiti 的边界事件

Activiti 流程引擎中,能够通过 边界事件 流程节点 附加特定用处的解决逻辑。比方,向 流程节点 减少一个 定时器边界事件 ,如果节点在指定的工夫内没有执行结束,就会主动触发 边界事件

2. CabloyJS 的节点行为

因为 边界事件 的实质是向 流程节点 附加特定的 行为 。因而,CabloyJS 采纳 节点行为 机制来实现相似 Activiti边界事件 的性能

CabloyJS 为 节点行为 设计了对立的开发标准,容许第三方开发自定义的 节点行为 类型。CabloyJS 零碎自身也将依据业务的理论需要以及优先级,继续减少内置的 节点行为 类型

3. 边界事件与节点行为的区别

  1. 配置简洁

    1. 在 Activiti 中,边界事件 由独自的 XML 节点配置,并与 流动节点 建设连贯
    2. 在 CabloyJS 中,间接在 流动节点 的 JSON 配置中增加 行为 配置,使得流程定义文件更加简洁、紧凑
  2. 开发简便

    1. 在 Activiti 中,提供了几个内置的 边界事件 ,大多数场景都是基于这些内置 边界事件 做开发,却鲜有人尝试开发自定义的 边界事件
    2. 在 CabloyJS 中,提供了十分清晰的编程接口,不仅内置罕用的 节点行为 ,而且容许第三方十分便捷的开发自定义的 节点行为 类型

演示

上面的动图演示了:

  1. 审核节点 减少 超时行为 ,零碎主动调配了一个色彩,用于辨别不同的 行为
  2. 设置 行为 的配置:持续时间
  3. 行为 拉出一根 转移线 ,指向 起草节点
  4. 成果:当超过指定的工夫还没有审核结束,就会主动转向 起草节点

如果要进一步钻研如何创立一个残缺的 流程定义,请参见:

  1. 演示:CMS 审批工作流
  2. 演示:CMS 审批工作流(可视化编辑)

JSON 标准

为了反对 节点行为 ,在原有流程定义的根底之上,同时扩大了 流动节点 JSON 标准 转移线 JSON 标准,参见:

  1. 流程定义 JSON 标准
  2. 流动节点 JSON 标准
  3. 转移线 JSON 标准

1. 流动节点 JSON 标准

在惯例的 流动节点 JSON 标准 中减少了 behaviors 属性。因为一个 节点 能够附加多个 行为 ,因而behaviors 是一个数组

{
  id: 'activity_1',
  name: 'Review',
  type: 'activityUserTask',
  options: {
    assignees: {vars: 'flowUser',},
  },
  behaviors: [
    {
      id: 'behavior_1',
      name: 'Overtime',
      type: 'overtime',
      color: '#FF3B30',
      options: {
        cancelActivity: true,
        timeDuration: 3000,
      },
    },
  ],
},
  • behavior
名称 阐明
id 行为惟一标识
name 行为名称
type 行为类型
color 行为色彩。因为 行为 也能够引出 转移线,因而能够通过不同的色彩进行辨别
options 行为配置,对应不同的行为类型

2. 转移线 JSON 标准

在惯例的 转移线 JSON 标准 中减少了 behavior 属性,用于标识该 转移线 所对应的 行为 Id

{
  id: 'edge_3',
  source: 'activity_1',
  target: 'startEvent_1',
  behavior: 'behavior_1',
},
名称 阐明
behavior 对应的 行为 Id,如果不设置就是 节点 自身引出的 转移线

相干链接

  • CabloyJS 网站: https://cabloy.com/
  • NodeJS 工作流引擎文档:https://cabloy.com/zh-cn/arti…
  • GitHub 源码仓库: https://github.com/zhennann/c…
退出移动版