前言

众所周知,NodeJS作为后端开发语言和运行环境,样样都好,就差一个NodeJS工作流引擎。CabloyJS 4.0重点开发了NodeJS工作流引擎,并作为内置的基础核心模块,近一步拓展了NodeJS在后端的应用场景,为深入研发各类商业业务逻辑,提供了基础支撑

NodeJS工作流引擎的特点

  1. 更简便的配置:采用JSON进行流程定义的配置,告别XML配置文件的冗杂
  2. 流程定义:支持历史版本、支持启用/禁用
  3. 更清晰的架构:采用三个核心模块用分层的机制实现工作流引擎的架构,让工作流不再神秘,源码也不再叠床架屋
模块名称 说明
a-flow 流程定义、流程实例
a-flownode 流程节点(活动节点)
a-flowtask 流程任务
  1. 支持业务流程审批流程
  2. Atom三生三世结合,内置了一套基于Atom的审批工作流。参见:原子阶段(三生三世)
  3. 表单验证结合,支持分别配置不同流程节点的读取字段权限修改字段权限。参见:表单验证
  4. 可通过AOP机制定制工作流逻辑
  5. 可通过Listener机制定制工作流逻辑
  6. 开放式的架构,支持更多流程节点的定制开发
  7. 包含大量测试驱动代码,可快速上手使用工作流

工作流演示

  1. 新建一个草稿:采购订单
  2. 选择要使用的流程定义,然后提交,草稿进入相应的审批流程
  3. 签收任务、并处理任务
  4. 流程结束,草稿转为归档

一个最简工作流定义

src/module/test-flow/backend/src/config/static/flowDef/set00_simple.js

  {
listener: null,
process: {
nodes: [
{
id: 'startEvent_1',
name: 'Start',
type: 'startEventNone',
},
{
id: 'endEvent_1',
name: 'End',
type: 'endEventNone',
},
],
edges: [
{
id: 'edge_1',
source: 'startEvent_1',
target: 'endEvent_1',
},
],
},
}
名称 说明
listener 监听器,可监听flow/node/task各类事件
process.nodes 流程节点
process.nodes.type 流程节点类型
process.edges 流程转移线
process.edges.source 来源
process.edges.target 去向

一个审批流程定义

src/module/test-flow/backend/src/config/static/flowDef/set01_atomUserTask.js

  {
listener: null,
process: {
nodes: [
{
id: 'startEvent_1',
name: 'Drafting',
type: 'startEventAtom',
options: {
atom: {
module: moduleInfo.relativeName,
atomClassName: 'purchaseOrder',
},
conditionExpression: 'atom._flowDefKey===\'set01_atomUserTask\'',
},
},
{
id: 'activity_1',
name: 'Review',
type: 'activityUserTask',
options: {
assignees: {
// users: '1,2',
// roles: '1,2',
vars: 'flowUser',
},
confirmation: false,
bidding: false,
completionCondition: {
// passed: 1,
// rejected: '100%',
},
// rejectedNode:null,
// allowRejectTask: true,
// allowCancelFlow: false,
schema: {
write: [
'atomName',
{
name: 'description',
property: {
type: 'string',
ebType: 'text',
ebTitle: 'Description',
},
},
],
},
},
},
{
id: 'endEvent_1',
name: 'End',
type: 'endEventNone',
},
],
edges: [
{
id: 'edge_1',
source: 'startEvent_1',
target: 'activity_1',
},
{
id: 'edge_2',
source: 'activity_1',
target: 'endEvent_1',
},
],
},
}
  • process.nodes.type
名称 说明
startEventAtom 开始事件节点(起草):通过options.atom和options.conditionExpression与指定的Atom类型绑定。当指定的Atom提交时自动启动相匹配的工作流定义
activityUserTask 用户任务节点:可指定参与人、是否竞签、完成条件、读字段权限、写字段权限,等等
endEventNone 结束事件节点

相关链接

CabloyJS也有工作流引擎了,是你想要的吗?的更多相关文章

  1. CabloyJS自带工作流引擎的文档清单

    文档清单 CabloyJS自带工作流引擎文档已经整理出来,欢迎大家围观.拍砖 介绍 介绍 演示:CMS审批工作流 单元测试用例集 流程定义 基本概念 JSON规范 listener规范 listene ...

  2. 看看CabloyJS工作流引擎是如何实现Activiti边界事件的

    CabloyJS内置工作流引擎的基本介绍 1. 由来 众所周知,NodeJS作为后端开发语言和运行环境,支持高并发.开发效率高,有口皆碑,但是大多用于数据CRUD管理.中间层聚合和中间层代理等工具场景 ...

  3. CabloyJS v4.0.0支持工作流引擎及更多 🎉

    截至2020年12月21日冬至,花了近5年时间作出最小可用NodeJS开源全栈框架,这就是CabloyJS V4.0.0 5年,90个模块,30万行代码,5400次提交(Commits),开启Node ...

  4. 分享一款自带工作流引擎的NodeJS全栈框架,接单快手、创业神器

    CabloyJS是什么 CabloyJS是一款自带工作流引擎的Node.js全栈框架, 接单快手.创业神器, 基于koa + egg + vue + framework7 + mysql 在线演示 场 ...

  5. 用Crontab打造简易工作流引擎

    1. 引言 众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题: 无法判断Hive partition是否已 ...

  6. 工作流引擎Oozie(一):workflow

    1. Oozie简介 Yahoo开发工作流引擎Oozie(驭象者),用于管理Hadoop任务(支持MapReduce.Spark.Pig.Hive),把这些任务以DAG(有向无环图)方式串接起来.Oo ...

  7. 【2016-11-7】【坚持学习】【Day22】【工作流引擎设计--执行用户】

    最近在做一个工作流引擎,架构师已经设计好了,但是我发现他设计 每一步的用户集合的设计,有一定的不足,或者是不方便,不同的组织架构影响着他的用户数据源配置方式. 于是我想花点时间去看看人家优秀是工作流引 ...

  8. .net之工作流工程展示及代码分享(二)工作流引擎

    在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: [Serializable] public class Flow { [Xml ...

  9. F2工作流引擎之-纯JS Web在线可拖拽的流程设计器(八)

          Web纯JS流程设计器无需编程,完全是通过鼠标拖.拉.拽的方式来完成,支持串行.并行.分支.异或分支.M取N路分支.会签.聚合.多重聚合.退回.传阅.转交,都可以非常方便快捷地实现,管理员 ...

随机推荐

  1. java集合总览

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  2. Could not autowire. No beans of 'JavaMailSenderImpl' type found

  3. coolshell-初见

    首页:https://coolshell.cn/tag/programmer 我是怎么招聘程序员的 https://coolshell.cn/articles/1870.html 程序员需要具备的基本 ...

  4. 基于Vue开发的门户网站展示和后台数据管理系统

    基于Vue的前端框架有很多,这几年随着前端技术的官方应用,总有是学不完的前端知识在等着我们,一个人的精力也是有限,不可能一一掌握,不过我们学习很大程度都会靠兴趣驱动,或者目标导向,最终是可以以点破面, ...

  5. 序列化器中钩子函数源码分析、many关键字源码分析

    局部钩子和全局钩子源码分析(2星) # 入口是 ser.is_valid(),是BaseSerializer的方法 # 最核心的代码 self._validated_data = self.run_v ...

  6. Java学习day9

    抽象类的关键字:abstract 类中有抽象方法时,需要在类名前也加上abstract关键字,即 public abstract class 类名{ } 同时,抽象类不能直接实例化,需要通过子类继承, ...

  7. jsp第二周作业

    1.p39 实验2 显示当前时间,并输出上午(0-12)好,下午好(13-17),晚上好(18-23) <%@ page language="java" import=&qu ...

  8. 【SpringBoot实战】视图技术-Thymeleaf

    前言 在一个Web应用中,通常会采用MVC设计模式实现对应的模型.视图和控制器,其中,视图是用户看到并与之交互的界面.对最初的Web应用来说,视图是由HTML元素组成的静态界面:而后期的Web应用更倾 ...

  9. [AcWing 28] 在O(1)时间删除链表结点

    点击查看代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L ...

  10. 团队Beta演示

    组长博客 本组(组名)所有成员 短学号 姓名 2236 王耀鑫(组长) 2210 陈超颖 2209 陈湘怡 2228 许培荣 2204 滕佳 2205 何佳琳 2237 沈梓耀 2233 陈志荣 22 ...