前言
衆所周知,NodeJS做爲後端開發語言和運行環境,樣樣都好,就差一個NodeJS工做流引擎
。CabloyJS 4.0重點開發了NodeJS工做流引擎
,並做爲內置的基礎核心模塊,近一步拓展了NodeJS在後端的應用場景,爲深刻研發各種商業業務邏輯,提供了基礎支撐javascript
NodeJS工做流引擎的特色
- 更簡便的配置:採用
JSON
進行流程定義的配置,告別XML配置文件的冗雜 - 流程定義:支持歷史版本、支持啓用/禁用
- 更清晰的架構:採用三個核心模塊用分層的機制實現工做流引擎的架構,讓工做流再也不神祕,源碼也再也不疊牀架屋
模塊名稱 | 說明 |
---|---|
a-flow | 流程定義、流程實例 |
a-flownode | 流程節點(活動節點) |
a-flowtask | 流程任務 |
- 支持
業務流程
和審批流程
- 與
Atom三生三世
結合,內置了一套基於Atom的審批工做流
。參見:原子階段(三生三世) - 與
表單驗證
結合,支持分別配置不一樣流程節點的讀取字段權限
和修改字段權限
。參見:表單驗證 - 可經過
AOP
機制定製工做流邏輯 - 可經過
Listener
機制定製工做流邏輯 - 開放式的架構,支持更多
流程節點
的定製開發 - 包含大量
測試驅動
代碼,可快速上手使用工做流
工做流演示
- 新建一個草稿:
採購訂單
- 選擇要使用的
流程定義
,而後提交,草稿進入相應的審批流程
- 簽收任務、並處理任務
- 流程結束,草稿轉爲
歸檔
一個最簡工做流定義
src/module/test-flow/backend/src/config/static/flowDef/set00_simple.js
html
{ 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
java
{ 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 | 結束事件節點 |