CabloyJS也有工做流引擎了,是你想要的嗎?

IMG_8706

前言

衆所周知,NodeJS做爲後端開發語言和運行環境,樣樣都好,就差一個NodeJS工做流引擎。CabloyJS 4.0重點開發了NodeJS工做流引擎,並做爲內置的基礎核心模塊,近一步拓展了NodeJS在後端的應用場景,爲深刻研發各種商業業務邏輯,提供了基礎支撐javascript

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. 流程結束,草稿轉爲歸檔

flow-zhcn

一個最簡工做流定義

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

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

{
    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 結束事件節點

相關連接

相關文章
相關標籤/搜索