关于node.js:CabloyJS也有工作流引擎了是你想要的吗

7次阅读

共计 2115 个字符,预计需要花费 6 分钟才能阅读完成。

前言

家喻户晓,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 完结事件节点

相干链接

  • 官网: https://cabloy.com/
  • GitHub: https://github.com/zhennann/cabloy
正文完
 0