云工作流支持将云工作流本身作为流程的节点集成到一个工作流中,即通过一个流程触发另一个或多个子流程。本文介绍云工作流集成云工作流的示例代码、参数说明、返回值说明和支持的集成模式以及错误定义。
示例代码
以下为一个典型的云工作流集成示例代码。
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 : 服务器内部错误。