日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

選擇(Choice)

本文介紹選擇狀態的基本概念及其相關使用示例,以及條件表達式的相關內容。

基本概念

選擇狀態讓流程根據條件執行不同的狀態,類似于編程語言中的switch-case,它包含多個條件選項(Choice)和一個默認選項(Default),每個條件選項帶有一個條件表達式(Condition)和跳轉指令(Next)。

系統會按照選項定義的順序依次評估其條件表達式是否返回True。

  • 如果某選項返回True,則執行選項對應的狀態(如果定義了狀態),然后執行跳轉(如果定義跳轉指令)。

  • 如果沒有任何選項返回True,則執行默認選項對應的狀態和跳轉。

選擇狀態包含以下屬性。

字段

類型

是否必選

描述

示例值

Name

string

狀態名稱。

my state

Description

string

狀態描述。

describe it here

Type

string

狀態類型。

Choice

InputConstructor

map[string]any

輸入構造器。

請參見輸入和輸出

Default

string

默認分支。

my next task

Branches

ChoiceBranch

分支列表。

請參見ChoiceBranch

ChoiceBranch

字段

類型

是否必選

描述

示例值

Condition

string

條件表達式。

$Input.status=="ready"

Next

string

指向節點名稱。

my next task

重要

Choice狀態不支持End屬性和Next屬性,通過Default屬性表示所有選擇條件都不滿足時的默認指向狀態,作用同Next,但在Branches中支持Next屬性。

使用示例

以下示例定義一個選擇狀態。

  • 如果輸入中的status的值是ready,則會執行第一個條件選項的狀態Pass2。

  • 如果輸入中的status的值不是ready,則會執行默認選項邏輯,即Pass1

Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Choice1
States:
  - Type: Choice
    Name: Choice1
    Branches:
      - Condition:$Input.status=="ready"
        Next: Pass2
    Default: Pass1
  - Type: Pass
    Name: Pass1
    End: true
  - Type: Pass
    Name: Pass2
    End: true

條件表達式

當前系統支持的條件表達式由以下操作和變量組成,執行后返回Bool值即可達成條件:

  • 比較操作:>、>=、<、<===、!=,適用于字符串和數字類型。

  • 邏輯操作:||、&&。

  • 字符常量:以雙引號(“”)或者反引號(``)開始和結束,例如"foobar"或者`foobar`。

  • 數字常量:112.5。

  • 布爾常量:truefalse。

  • 前綴:!、-。

  • 包含:in,用來判斷數組是否包含某個值,或者對象是否包含某個鍵值。

表達式示例

以下示例對于下面的狀態輸入$Input,針對不同的條件表達式,顯示了不同的執行結果。Condition可以使用的上下文表達式變量為$Context$Input。更多信息,請參見數據傳遞。

{
	"a": 1,
	"b": {
		"b1": true,
		"b2": "ready"
	},
	"c": [1, 2, 3],
	"d": 1,
	"e": 1,
	"f": {
		"f1": false,
		"f2": "inprogress"
	}
}

條件表達式

執行結果

$Input.a==1

true

$Input.a==2

false

$Input.a>0

true

0<$Input.a

true

$Input.a>=1

true

$Input.a!=2

true

$Input.b.b1

true

$Input.b.b1==true

true

$Input.b.b1==false

false

$Input.b.b2=="ready"

true

$Input.b.b2=="inprogress"

false

$Input.a==1 && $Input.b.b1

true

$Input.a==2 && $Input.b.b1

false

$Input.c[0]==1

true

$Input.c[0]==$Input.a

true