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

輸入和輸出

云工作流的各種狀態(State)之間需要傳遞數據,每個狀態(State)將接受前一狀態的輸入(Input),并返回輸出(Output)并將此輸出傳遞給下一個狀態(State)。本文介紹輸入和輸出的基礎知識。

流程和狀態

流程(Flow)的多個狀態(State)之間傳遞數據,和函數式編程語言類似。云工作流的狀態(State)類似于編程中的函數,接受輸入,返回輸出,輸出保存在上下文中。所以對于工作流的每次執行,會涉及兩個概念:流程執行的輸入和輸出,流程執行中具體某個狀態的輸入和輸出。

說明

輸入和輸出的類型必須是JSON對象格式。流程狀態的輸入、輸出大小不能超過64 KiB,否則會導致流程(Flow)執行失敗。

執行輸入和輸出

  • 執行輸入:常常被稱為“流程輸入”,是針對流程的每次執行要求的用戶輸入,流程編排過程中可以通過系統表達式$Context.Execution.Input訪問本次執行的輸入;

  • 執行輸出:常常被稱為“流程輸出”,是針對流程的每次執行產生的輸出;當前流程編排規范設計中,在流程的編排過程中,無法通過系統變量訪問流程執行的輸出;

狀態輸入和輸出

  • 狀態輸入:流程編排過程中,可以通過系統表示式$Context.Current.Input訪問當前狀態的輸入,快捷表達式為$Input

  • 狀態輸出:流程編排過程中,可以通過系統表示式$Context.Current.Output訪問當前狀態的輸出,快捷表達式為$Output,當然并不是在所有的地方都能使用$Output,僅僅在OutputConstructor 作用域中可以使用$Output

構造器中涉及的系統表達式

  • $Context:生命周期貫穿整個工作流執行過程,關于$Context的內容請參考數據傳遞

  • $Input:生命周期開始于進入State,結束于State退出,是$Context.Current.Input的快捷形式。

  • $Output:生命周期開始于進入任務調用返回,結束于State退出,是$Context.Current.Output的快捷形式。

image

說明

圖示中$Input= InputConstructor 表示在這個作用域內,InputConstructor 構造完成之后,將構造的結果賦值給$Input;同理,圖示中 Task 調用之后,$Output的取值是 Task 返回結果,如果Task的調用是異步回調模式,那么$Output取值就是回調之后的返回結果;此時,流程繼續執行,$Output= OutputConstructor 表示在這個作用域范圍內,OutputConstructor 構造完成之后,將構造的結果賦值給$Output

狀態輸入構造器

狀態輸入構造器中可以使用的系統變量如下:

  • $Context

  • $Input

說明

輸入構造器的表達式與選擇(Choice)狀態的條件表達式不同,條件表達式只能返回布爾值,而輸入構造器的表達式可以返回任意值。

Type: StateMachine
Name: InputConstructExample
SpecVersion: v1
StartAt: InvokeFunction
States:
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    InputConstructor:
      FieldA.$: $Context.Execution.Input
      FieldB: World
    Parameters:
      resourceArn: >-
        acs:fc:cn-hangzhou:123456:services/helloworld.LATEST/functions/helloworld
      invocationType: Sync
      body.$: $Input 
    End: true

上述示例中,輸入構造器InputConstructor的數據結構為 map[string]any。其中FieldA: 123 代表賦值動作。關于構造器中可使用的內置函數,請參見內置函數

狀態輸出構造器

狀態輸出構造器中可以使用的系統變量如下:

  • $Context

  • $Input

  • $Output

單個狀態內部邏輯已經執行完畢,可以使用$Output代表狀態的輸出進行后續操作。

說明

與輸入構造器相比,輸出構造器除了執行時機不同,還可以使用更多的上下文表達式變量。例如,一個工作流集成,在輸入構造器的位置,只可以使用$Context$Input。而在輸出構造器的位置,已經通過該 Task 調用產生輸出,則可以使用$Output代表輸出內容。 當使用以$開頭的保留字時,需要在流程定義語言支持的構造器的Key的末尾添加.$,否則將會作為字符串處理。

Type: StateMachine
Name: OutputConstructExample
SpecVersion: v1
StartAt: InvokeFunction
States:
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: >-
        acs:fc:cn-hangzhou:123456:services/helloworld.LATEST/functions/helloworld
      invocationType: Sync
      body.$: $Input 
    OutputConstructor:
      returnID.$: uuid()
      functionResult.$: $Output
    	functionResultStr.$: jsonToString($Output)
      executionInput.$: $Context.Execution.Input
      lastOutput.$: $Input
    End: true

上述示例中,輸出構造器OutputConstructor的數據結構為 map[string]any。其中分別把 $Context, $Input, $Output 的值賦值操作,分別把流程執行的輸入,上一個狀態的輸出,當前狀態的輸出合并到一個輸出結果中。

說明

IO構造中,支持使用內置函數,需要在流程定義語言支持的構造器的 Key 末尾添加.$,用于表示對應的 Value 為表達式,需要進行表達式解析,否則將會作為字符串處理;當前 IO構造中,最多支持10層的內置函數嵌套。