云工作流支持將云工作流本身作為流程的節點集成到一個工作流中,即通過一個流程觸發另一個或多個子流程。本文介紹云工作流集成云工作流的示例代碼、參數說明、返回值說明和支持的集成模式以及錯誤定義。
示例代碼
以下為一個典型的云工作流集成示例代碼。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: StartExecution
States:
- Type: Task
Name: StartExecution
Action: FNF:StartExecution
TaskMode: RequestComplete
Description: 調用工作流示例
Parameters:
resourceArn: acs:fnf:cn-hangzhou::flow/test-workflow
executionName: theExecutionName
input:
key: value1
End: true
代碼解析如下。
Action:固定為
FNF:StartExecution
。TaskMode:支持請求響應(RequestComplete)、等待系統回調(WaitForSystemCallback)和等待用戶自定義回調(WaitForCustomCallback)集成模式。
Name、Description:根據需要配置能表達業務含義的名稱和描述。
參數說明
參數名稱 | 是否必選 | 參數說明 | 示例值 |
resourceArn | 是 | 工作流的ARN形式定義,該值可以從云工作流控制臺的工作流詳情頁獲得。 說明 工作流暫不支持跨地域的子流程調用。 | acs:fnf:::flow/test-workflow |
executionName | 否 | 每次執行工作流時使用的執行名稱。
| test-execution-name |
input | 否 | 工作流的業務數據輸入。只支持對象類型。 |
|
返回值說明
業務請求的返回結果,會被包裝在一個JSON對象中,示例如下。
{
"FlowName": "test-workflow",
"ExecutionName": "36cc6107-26cc-495f-b80b-d9fadff13fdd",
"RequestID": "12423452346y345634"
}
執行模式
云工作流集成云工作流時,支持請求響應(RequestComplete)、等待系統回調(WaitForSystemCallback)和等待用戶自定義回調(WaitForCustomCallback)集成模式。
RequestComplete
發起子工作流調用后,當前啟動新流程的請求完成即視為對應的Task完成。并以StartExecution的返回作為當前Task的輸出。
WaitForCustomCallback
工作流發起子流程調用以后,會向下游流程傳遞一個回調Token,而父流程進入掛起狀態。等待用戶使用分配的Token回調系統的ReportTaskSucceeded - 匯報指定的任務執行成功或ReportTaskFailed - 匯報指定的任務執行失敗接口上報執行結果,進而推進父流程的執行。
要在下游流程獲得每次執行的唯一Token,需要用戶自己定義一個Token的參數,如下所示。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: StartExecution
States:
- Type: Task
Name: StartExecution
Action: FNF:StartExecution
TaskMode: RequestComplete
Description: 調用工作流示例
Parameters:
resourceArn: acs:fnf:cn-hangzhou::flow/test-workflow
executionName: theExecutionName
input:
key: value1
token.$: $Context.Current.TaskToken
End: true
其中Token參數就是回調需要使用的數據,token
本身可以由使用者任意改名,但是必須使用$Context.Current.TaskToken
獲得其真實值。
WaitForSystemCallback
發起子工作流調用后,流程執行自動暫停。當子流程執行完成以后,系統自動回調父流程,并繼續后續步驟。
錯誤定義
FNF.ResourceThrottled : 流程執行被限流。
FNF.FlowNotExists : 工作流不存在。
FNF.AccessDenied : 禁止訪問,當前用戶或者角色不具備執行目標流程的權限。
FNF.ExecutionAlreadyExists : 同名的執行已存在。
FNF.InternalServerError : 服務器內部錯誤。