CloudFlow transfere dados entre estados em um workflow. Cada estado recebe a entrada do estado anterior e retorna uma saída para o próximo estado. Este tópico descreve as entradas e saídas nos workflows.
Informações básicas
Os dados em um workflow do CloudFlow fluem de um estado para outro, semelhantemente às chamadas de função na programação funcional. Cada estado recebe uma entrada e retorna uma saída, armazenada no contexto. Esse fluxo de dados entre estados permite automatizar processos em aplicações empresariais com lógica complexa.
As entradas e saídas devem ser objetos JSON. O tamanho da entrada e da saída de um estado não pode exceder 64 KiB. Se o tamanho ultrapassar esse limite, a execução do flow falhará.
Entradas e saídas de execuções
Entradas de execuções
Forneça informações ou dados para iniciar uma execução. Essas informações ou dados podem servir como entrada para um ou mais estados. Durante a orquestração do workflow, acesse a entrada de uma execução pela expressão de sistema $Context.Execution.Input.
Por exemplo, a lógica de um sistema de matrícula online consiste em três processos: coleta de informações do aluno, verificação das informações e efetivação da matrícula. Como as informações básicas do aluno são necessárias em cada processo, passe-as como entrada da execução e configure os três estados correspondentes para acessar essa entrada usando a expressão de sistema. A figura a seguir mostra um exemplo de entrada de execução.

Saídas de execuções
A saída de uma execução corresponde ao resultado de uma execução bem-sucedida. Não é possível acessar a saída de uma execução usando uma variável de sistema durante a orquestração do workflow.
Entradas e saídas de estados
Entradas de um estado
Durante a orquestração do workflow, use a expressão de sistema $Context.Current.Input ou sua forma abreviada $Input para acessar a entrada do estado atual.
Saídas de estados
Na orquestração do workflow, use a expressão de sistema $Context.Current.Output ou sua forma abreviada $Output para acessar a saída do estado atual. Observe que a forma abreviada $Output só pode ser usada nos escopos dos construtores de saída.
Construtores
Expressões de sistema utilizáveis em construtores
Use as seguintes expressões de sistema em construtores:
$Context: O ciclo de vida de $Context coincide com todo o período de execução do workflow. Para obter mais informações sobre
$Context, consulte Passagem de dados.$Input: O ciclo de vida de $Input começa quando o workflow entra no estado e termina quando sai dele. $Input é a forma abreviada de
$Context.Current.Input.$Output: O ciclo de vida de $Output inicia-se na entrada do estado de resposta da chamada de Task e encerra-se na saída desse estado. $Output é a forma abreviada de
$Context.Current.Output.$Global: O ciclo de vida de $Global abrange todo o período de execução do workflow. Para mais detalhes sobre
$Global, consulte Variáveis globais.
Uma chave terminada em
.$em um construtor de entrada, de saída ou de parâmetro deve receber um valor em formato de expressão. Caso contrário, ocorrerá um erro.Ao usar funções integradas ou variáveis de sistema iniciadas com
$, adicione.$ao final das chaves das variáveis para garantir que não sejam interpretadas como strings.Um construtor de entrada ou saída suporta até
10níveis de aninhamento de funções integradas.
A figura a seguir ilustra os ciclos de vida das expressões de sistema $Input, $Output, $Context e $Global, além dos processos de atribuição em diferentes estados.
$Inputrepresenta a entrada da execução.Na figura anterior,
$Input=InputConstructor($Context,$Global)indica que, dentro desse escopo,InputConstructorpode referenciar$Contexte$Globalpara extrair informações. O resultado da construção é atribuído a$Input.$Outputcorresponde ao resultado da chamada de Task. Se a chamada for iniciada no modo de callback assíncrono, o valor de$Outputserá o resultado desse callback.$Output=OutputConstructor($Context,$Global)significa que, nesse escopo,OutputConstructorpode referenciar$Contexte$Globalpara extrair informações. O resultado da construção é atribuído a$output.$Globalrefere-se às variáveis globais, acessíveis durante todo o período de execução do workflow.$Global=Merge($Global,GlobalConstructor($Context,$Global))indica que as variáveis construídas pelo construtor global são mescladas com as variáveis existentes em$Global. Em seguida, todas as variáveis são armazenadas em$Globalpara atualizar as variáveis globais compartilhadas.$Contextpermanece válido durante toda a execução.
InputConstructor
InputConstructor constrói a entrada de um workflow. As expressões do InputConstructor diferem das expressões condicionais dos estados Choice state. Enquanto as expressões condicionais retornam apenas valores booleanos, as expressões do InputConstructor podem retornar qualquer valor. Use as seguintes variáveis de sistema no InputConstructor do estado:
$Context
$Input
$Global
Quando existem múltiplas configurações de entrada, a prioridade segue esta ordem decrescente: InputConstructor, ItemsPath e ItemConstructor.
A definição de máquina de estados a seguir apresenta um exemplo de uso do InputConstructor.
Type: StateMachine
Name: test3-tx
SpecVersion: v1
StartAt: InvokeFunction1
States:
- Type: Task
Name: InvokeFunction
Action: FC:InvokeFunction
TaskMode: RequestComplete
InputConstructor:
FieldA.$: $Context.Execution.Input
FieldB: World
FieldC.$: length($Context.Execution.Input)
FieldD.$: $Global.InvokeFunctionPayload
Parameters:
resourceArn: >-
acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
invocationType: Sync
body.$: $Input
End: true
- Type: Task
Name: InvokeFunction1
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Sync
resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
GlobalConstructor:
InvokeFunctionPayload.$: $Output.Body
Next: InvokeFunction
No exemplo acima, a estrutura de dados de
InputConstructoré Map[String]Any.FieldA.$: $Context.Execution.Inputindica que a chave FieldA obtém dinamicamente o valor de$Context.Execution.Input, em vez de ser tratada como uma string.FieldB: Worldsignifica que a string estática 'World' é atribuída a FieldB. Nenhum valor é obtido dinamicamente, pois a chave FieldB não termina com o marcador .$.FieldC.$: length($Context.Execution.Input)demonstra o uso da função integrada length para obter o comprimento do valor em$Context.Execution.Inpute atribuir esse comprimento a FieldC. Para informações sobre as funções integradas disponíveis nos construtores, consulte Funções integradas.A expressão
FieldD.$: $Global. InvokeFunctionPayloadextrai o valor da chaveInvokeFunctionPayloadno espaço de armazenamento global e passa esse valor como campoFieldDpara o estadoTask.
OutputConstructor
Em comparação ao InputConstructor, o OutputConstructor é executado em um momento diferente e oferece suporte a mais variáveis nas expressões de contexto. Por exemplo, enquanto um construtor de entrada aceita apenas $Context ou $Input, o construtor de saída permite usar $Output para representar a saída, já que a chamada de Task já gerou esse resultado. Use as seguintes variáveis de sistema no OutputConstructor do estado:
$Context
$Input
$Output
$Global
A definição de máquina de estados abaixo fornece um exemplo de uso do OutputConstructor.
Type: StateMachine
Name: test3-tx
SpecVersion: v1
StartAt: InvokeFunction1
States:
- Type: Task
Name: InvokeFunction1
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Sync
resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
GlobalConstructor:
InvokeFunctionPayload.$: $Output.Body
Next: InvokeFunction
- Type: Task
Name: InvokeFunction
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: >-
acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
invocationType: Sync
body.$: $Input
OutputConstructor:
returnID.$: uuid()
functionResult.$: $Output
functionResultStr.$: jsonToString($Output)
executionInput.$: $Context.Execution.Input
lastOutput.$: $Input
demo.$: $Global
End: true
No exemplo anterior, a estrutura de dados de
OutputConstructoré map[string]any.functionResult.$obtém dinamicamente a saída do estado,executionInput.$recupera a entrada da execução elastOutput.$obtém a entrada do estado.returnID.$recupera o ID exclusivo, enquantofunctionResultStr.$obtém uma string criada a partir da saída do estado.