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...