CabloyJS 内置工作流引擎的根本介绍
1. 由来
家喻户晓,NodeJS 作为后端开发语言和运行环境,反对高并发、开发效率高,交口称誉,然而大多用于 数据 CRUD 治理
、 中间层聚合
和中间层代理
等工具场景,很少深刻到业务畛域的外围。有许多用 NodeJS 开发的 最小可用产品(MVP)
最终会重整旗鼓重构,这是起因之一
究其根源,NodeJS 作为业务开发平台,还短少许多外围的根底构件,NodeJS 工作流引擎
便是其一。CabloyJS 从 4.0 版本起,重点开发了 NodeJS 工作流引擎,并作为内置的根底外围模块(同样是开源、收费),近一步拓展了 NodeJS 在后端的利用场景,为深刻研发各类商业业务逻辑,提供了根底撑持
2. 特点
- 更简便的配置:采纳
JSON
进行流程定义的配置,辞别XML
配置文件的繁杂 - 更清晰的架构:基于
分层机制
采纳多个外围模块来搭建工作流引擎的架构,让工作流不再神秘,源码也不再叠床架屋
边界事件的概念与实现
1. Activiti 的边界事件
在 Activiti
流程引擎中,能够通过 边界事件
向流程节点
附加特定用处的解决逻辑。比方,向 流程节点
减少一个 定时器边界事件
,如果节点在指定的工夫内没有执行结束,就会主动触发 边界事件
2. CabloyJS 的节点行为
因为 边界事件
的实质是向 流程节点
附加特定的 行为
。因而,CabloyJS 采纳 节点行为
机制来实现相似 Activiti
中边界事件
的性能
CabloyJS 为 节点行为
设计了对立的开发标准,容许第三方开发自定义的 节点行为
类型。CabloyJS 零碎自身也将依据业务的理论需要以及优先级,继续减少内置的 节点行为
类型
3. 边界事件与节点行为的区别
-
配置简洁
:- 在 Activiti 中,
边界事件
由独自的 XML 节点配置,并与流动节点
建设连贯 - 在 CabloyJS 中,间接在
流动节点
的 JSON 配置中增加行为
配置,使得流程定义文件更加简洁、紧凑
- 在 Activiti 中,
-
开发简便
:- 在 Activiti 中,提供了几个内置的
边界事件
,大多数场景都是基于这些内置边界事件
做开发,却鲜有人尝试开发自定义的边界事件
- 在 CabloyJS 中,提供了十分清晰的编程接口,不仅内置罕用的
节点行为
,而且容许第三方十分便捷的开发自定义的节点行为
类型
- 在 Activiti 中,提供了几个内置的
演示
上面的动图演示了:
- 向
审核节点
减少超时行为
,零碎主动调配了一个色彩,用于辨别不同的行为
- 设置
行为
的配置:持续时间
- 从
行为
拉出一根转移线
,指向起草节点
- 成果:当超过指定的工夫还没有审核结束,就会主动转向
起草节点
如果要进一步钻研如何创立一个残缺的 流程定义
,请参见:
- 演示:CMS 审批工作流
- 演示:CMS 审批工作流(可视化编辑)
JSON 标准
为了反对 节点行为
,在原有流程定义的根底之上,同时扩大了 流动节点 JSON 标准
和转移线 JSON 标准
,参见:
- 流程定义 JSON 标准
- 流动节点 JSON 标准
- 转移线 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…