文档

输入和输出

更新时间:

云工作流的各种状态(State)之间需要传递数据,每个状态(State)将接受前一状态的输入(Input),并返回输出(Output)并将此输出传递给下一个状态(State)。本文介绍输入和输出的基础知识。

流程和状态

流程(Flow)的多个状态(State)之间传递数据,和函数式编程语言类似。云工作流的状态(State)类似于编程中的函数,接受输入,返回输出,输出保存在上下文中。

说明

输入和输出的类型必须是JSON对象格式。流程状态的输入、输出大小不能超过32 KB,否则会导致流程(Flow)执行失败。

变量作用域

  • $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: Hello
      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层的内置函数嵌套。

  • 本页导读 (1)
文档反馈