集成云工作流

云工作流支持将云工作流本身作为流程的节点集成到一个工作流中,即通过一个流程触发另一个或多个子流程。本文介绍云工作流集成云工作流的示例代码、参数说明、返回值说明和支持的集成模式以及错误定义。

示例代码

以下为一个典型的云工作流集成示例代码。

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

代码解析如下。

参数说明

参数名称

是否必选

参数说明

示例值

resourceArn

工作流的ARN形式定义,该值可以从云工作流控制台的工作流详情页获得。

说明

工作流暂不支持跨地域的子流程调用。

acs:fnf:::flow/test-workflow

executionName

每次执行工作流时使用的执行名称。

  • 如果不传该值,系统会自动分配一个唯一值。

  • 如果传该值,需要在目标流程下确保唯一性。

test-execution-name

input

工作流的业务数据输入。只支持对象类型。

input.$:
  key1: val1
  key2: $Input.age

返回值说明

业务请求的返回结果,会被包装在一个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 : 服务器内部错误。