Map狀態預設以內聯模式運行,內聯模式可以用於批量處理資料,簡化資料的轉換與處理流程,適用於操作集合內的每個元素,強調單一節點的處理。
基本概念
迭代狀態遍曆輸入中的某個數群組類型參數,對於數組中的每個元素,並存執行其處理器(Processor)狀態。迭代狀態類似於程式設計語言中的foreach
,不同之處是這裡的迭代是並存執行的。
執行並行迭代步驟會並發執行輸入參數中的每個元素的處理器狀態。當所有分支執行結束後,預設將輸出一個包含所有分支結果的map[string]any,然後通過輸出構造器將結果進行進一步處理。
內聯模式包含以下屬性:
欄位 | 類型 | 是否必選 | 描述 | 樣本值 |
Name | string | 是 | 狀態名稱。 | my-state-name |
Description | string | 否 | 狀態原因。 | describe it here |
Type | string | 是 | 狀態類型。 | Map |
InputConstructor | map[string]any | 否 | 輸入構造器。 | 請參見輸入和輸出 |
ItemsPath | string | 是 | 用於提取輸入數組的運算式。 | 請參見ItemsPath |
Processor | Processor | 是 | 迭代處理器。 | 請參見Processor |
OutputConstructor | map[string]any | 否 | 輸出構造器。 | 請參見狀態輸出構造器 |
Next | string | 否 | 目前狀態的下一狀態。當End取值為true時,無需指定。 | my-next-state |
End | bool | 否 | 是否為當前範圍的終結節點。 | true |
Retry | Retry | 否 | 用於定義錯誤重試策略。 | 請參見錯誤處理 |
Catch | Catch | 否 | 用於定義錯誤捕獲策略。 | 請參見錯誤處理 |
MaxConcuccency | int | 否 | 用於配置最大並發數。 | 28 |
內聯模式的關鍵字段
ItemsPath
用於提取輸入數組的運算式。該運算式執行後返回JSON Array,則可以進行迭代,將其中每個元素傳入ItemProcessor進行處理;可使用運算式變數$Context和$Input,樣本如下:
$Input.FieldA
Processor
迭代處理器。包含以下兩個欄位:
欄位 | 類型 | 是否必選 | 描述 | 樣本值 |
States | array | 是 | 內部嵌套的狀態數組。 |
|
StartAt | string | 是 | 內部嵌套狀態數組的執行起點。 | my start task |
MaxConcuccency
MaxConcurrency支援對子工作流程執行的並發配置,最大並發數可達到40。
使用樣本
以下樣本流程定義一個迭代狀態,這個迭代步驟處理器包含一個通過狀態。
Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Map1
States:
- Type: Map
Name: Map1
End: true
InputConstructor:
FieldA:
- a : b
- c : d
- e : f
ItemsPath: $Input.FieldA
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
流程的輸入構造結果如下所示。
{
"FieldA": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}
針對Map,系統會對所有迭代Processor的輸出結果進行合并,預設以關鍵字 "Items" 作為Key,合并後的結果作為Value;Map1
的輸出結果如下所示, 自動添加此輸出也是最後流程執行的輸出。
{
"Items": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}