メインコンテンツまでスキップ
条件によってフローの分岐先を決めます。

Router

Router は条件に応じてワークフローの経路を決めるプロセッサーです。

基本的な使い方​

Router は設定された条件を順に評価します。最初に true となった分岐が実行され、どれにも合致しない場合は Else の分岐へ進みます。

設定項目​

ノードのプロパティパネルです。

Router のプロパティパネル。Properties で case を追加し、Next Step には Else だけがある

Name​

キャンバス上に表示される名前です。ワークフロー内でこのプロセッサーを識別するために使います。

Description​

このプロセッサーの用途を補足し、ワークフローの読みやすさを高めます。

Properties​

条件分岐は必要な数だけ追加できます。各分岐は名前と条件を持ちます。

値の種類​

  • Literal: true または false を直接入力します
  • Expression: JavaScript の式で条件を判定します
  • Template: テンプレート構文で条件を評価します

値の取得方法はExpression の概要 — 値の取得を参照してください。

Workflow CRD での設定​

各分岐は 1 つの 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 を 1 つ追加します。

case 名条件
need_restockExpression:low_stock.length > 0

ノードに need_restock という分岐が現れ、もとからある Else と合わせて出口が 2 本になります。条件は真偽値を返す必要があります。

条件の評価順序​

Router は case を追加した順に見ていき、最初に成立したものを採用してそこで評価を止めます。それ以降の case は見られません。どれも成立しなかった場合だけ Else に進みます。

真偽の判定は「値があれば真」ではありません。

  • 真偽値はそのまま使われます。
  • 文字列は strconv.ParseBool で解析されるので true、false、1、0、t、f は使えます。解析できない文字列は false ではなく Failure になります。
  • 真偽値でも文字列でもない値(オブジェクト、数値、null)はすべて Failure です。

ここは誤解されがちです。真偽値以外を返す式を条件に書くと、黙って Else に流れるのではなくノードが失敗します。