跳至主要内容
依條件決定流程往哪一條分支走。

Router

Router 是用於根據條件決定工作流程執行路徑的 processor。

基本用法​

執行 Router 時,會依序檢查設定的條件,第一個評估為 true 的條件分支會被執行,如果所有條件都不符合則走向 Else 分支。

配置參數​

節點的屬性面板:

Router 的屬性面板:Properties 用來加 case,Next Step 只有一條 Else

Name​

顯示在畫布上的名稱,用於在工作流程中識別此 processor。

Description​

用於補充此 processor 的用途,提升工作流程的可讀性。

Properties​

可以新增多個條件分支,每個分支包含條件名稱和條件值。

設定類型選項​

  • Literal:直接輸入 true 或 false
  • Expression:使用 JavaScript 表達式進行條件判斷
  • Template:使用模板語法進行條件評估

詳細的取值方式說明請參考:Expression 介紹 - 取值方式

在 Workflow CRD 中的設定​

每個條件分支是一個 config,名稱依序為 case-1、case-2,值就是該分支的判斷式。分支名稱同時也是連接關係的名稱,所以新增一個 case 等於同時新增一個設定與一條出線。

- name: proc-route
type: router
labels:
display_name: 判斷是否為退貨詢問
configs:
- name: case-1
expression: |-
(() => {
return /退貨|退款/.test(prevMessage);
})()
- name: case-2
expression: |-
(() => {
return /出貨|物流/.test(prevMessage);
})()

預設的連接關係是 case-1 與 else。else 不需要設定條件,所有 case 都不成立時會走它。

連接關係​

動態分支​

根據在 Properties 中設定的條件,會自動產生對應的連接點。當條件評估為 true 時,工作流程會從該分支繼續執行。

Else​

當所有動態條件都不符合時,工作流程會從此連接點繼續執行,作為預設的執行路徑。

一個實際的例子​

依庫存查詢結果決定要不要通知。在 Properties 按 + 加一個 case:

case 名稱條件
need_restockExpression:low_stock.length > 0

畫面上會多出一條叫 need_restock 的分支,加上本來就有的 Else,共兩條出口。條件要回傳布林值。

條件怎麼被判斷​

Router 依照 case 加入的順序往下檢查,第一個成立的就走那一條並停止檢查,後面的 case 不會再看。全部都不成立才走 Else。

判斷值不是「有值就算真」:

  • 布林值直接採用。
  • 字串會用 strconv.ParseBool 解析,所以 true、false、1、0、t、f 這些可以,解析不出來的字串會走 Failure,不是當成 false。
  • 既不是布林也不是字串的值(物件、數字、null)一律走 Failure。

這一點常被誤解:條件寫成一個會回傳非布林值的 expression 時,流程不會安靜地走 Else,而是整個節點失敗。