CloudFlow transfiere datos entre estados dentro de un flujo de trabajo. Cada estado recibe la entrada proporcionada por el estado anterior, y devuelve su salida para pasarla al siguiente estado. Este tema describe las entradas y salidas en los flujos de trabajo.
Contexto
Los datos en un flujo de trabajo de CloudFlow fluyen de un estado a otro, de manera similar a las llamadas de función en la programación funcional. Cada estado recibe una entrada y devuelve una salida. Los datos de salida se almacenan en el contexto. Este flujo de datos entre estados permite automatizar procesos en aplicaciones empresariales que requieren lógica compleja.
Las entradas y salidas deben ser objetos JSON. El tamaño de la entrada y salida de un estado no puede exceder 64 KiB. Si el tamaño de la entrada o salida de un estado supera los 64 KiB, la ejecución del flujo fallará.
Entradas y salidas de ejecuciones
Entradas de ejecuciones
Debe proporcionar información o datos para iniciar una ejecución. Dicha información o datos pueden servir como entrada para uno o varios estados. Durante la orquestación del flujo de trabajo, puede acceder a la entrada de una ejecución mediante la expresión de sistema $Context.Execution.Input.
Por ejemplo, la lógica de un sistema de inscripción de estudiantes en línea consta de tres procesos: recopilación de información del estudiante, verificación de la información e inscripción. La información básica del estudiante es obligatoria en cada proceso. En este caso, puede pasar la información básica del estudiante como entrada de la ejecución y configurar los tres estados correspondientes para que accedan a dicha entrada mediante la expresión de sistema.
En el cuadro de diálogo Execute Flow, establezca Execution Name como test. En la sección Execution Input, introduzca un objeto JSON que contenga la información básica del estudiante en el editor JSON. El objeto JSON contiene campos como name, age, gender, country, city, occupation, hobbies (matriz) y isActive (booleano).
Salidas de ejecuciones
La salida de una ejecución es el resultado de una ejecución exitosa. No es posible acceder a la salida de una ejecución mediante una variable de sistema durante la orquestación del flujo de trabajo.
Entradas y salidas de estados
Entradas de un estado
Durante la orquestación del flujo de trabajo, puede usar la expresión de sistema $Context.Current.Input o su forma abreviada $Input para acceder a la entrada del estado actual.
Salidas de estados
Durante la orquestación del flujo de trabajo, puede usar la expresión de sistema $Context.Current.Output o su forma abreviada $Output para acceder a la salida del estado actual. Tenga en cuenta que la forma abreviada $Output solo se puede utilizar dentro de los alcances de los constructores de salida.
Constructores
Expresiones de sistema utilizables en constructores
Las siguientes expresiones de sistema se pueden utilizar en los constructores:
$Context: El ciclo de vida de $Context abarca todo el periodo de ejecución del flujo de trabajo. Para obtener más información sobre
$Context, consulte Data passing.$Input: El ciclo de vida de $Input comienza cuando el flujo de trabajo entra al estado y termina cuando sale de él. $Input es la forma abreviada de
$Context.Current.Input.$Output: El ciclo de vida de $Output comienza cuando el flujo de trabajo entra al estado de respuesta de llamada de tarea y termina cuando sale de dicho estado. $Output es la forma abreviada de
$Context.Current.Output.$Global: El ciclo de vida de $Global abarca todo el periodo de ejecución del flujo de trabajo. Para obtener más información sobre
$Global, consulte Global variables.
Una clave que termine con
.$en un constructor de entrada, de salida o de parámetros debe tener asignado un valor en forma de expresión. De lo contrario, se producirá un error.Cuando utilice funciones integradas o variables de sistema que comiencen con
$, añada.$al final de las claves de las variables para asegurar que no se interpreten como cadenas de texto.Un constructor de entrada o de salida admite hasta
10niveles de anidamiento de funciones integradas.
La siguiente figura muestra los ciclos de vida de las expresiones de sistema $Input, $Output, $Context y $Global, así como los procesos de asignación en los diferentes estados.
$Inputrepresenta la entrada de la ejecución.En la figura anterior,
$Input=InputConstructor($Context,$Global)indica que, dentro de su alcance,InputConstructorpuede hacer referencia a$Contexty$Globalpara extraer información de ellos. El resultado de la construcción se asigna a$Input.$Outputes el resultado de la llamada de tarea. Si la llamada se inicia en modo de devolución de llamada asíncrona, el valor de$Outputcorresponde al resultado de dicha devolución de llamada.$Output=OutputConstructor($Context,$Global)indica que, dentro de su alcance,OutputConstructorpuede hacer referencia a$Contexty$Globalpara extraer información de ellos. El resultado de la construcción se asigna a$output.$Globalrepresenta las variables globales, accesibles durante todo el periodo de ejecución del flujo de trabajo.$Global=Merge($Global,GlobalConstructor($Context,$Global))indica que las variables construidas por el constructor global se fusionan con las variables existentes en$Global; posteriormente, todas las variables se almacenan en$Globalpara actualizar las variables globales compartidas.$Contextpermanece válido durante toda la ejecución.
InputConstructor
InputConstructor construye la entrada de un flujo de trabajo. Las expresiones de InputConstructor difieren de las expresiones condicionales de los estados Choice state. Mientras que las expresiones condicionales solo devuelven valores booleanos, las expresiones de InputConstructor pueden devolver cualquier valor. Puede utilizar las siguientes variables de sistema en el InputConstructor del estado:
$Context
$Input
$Global
Cuando existen múltiples configuraciones de entrada, la prioridad sigue el siguiente orden descendente: InputConstructor, ItemsPath e ItemConstructor.
La siguiente definición de máquina de estados proporciona un ejemplo de cómo utilizar 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
En el ejemplo anterior, la estructura de datos de
InputConstructores Map[String]Any.FieldA.$: $Context.Execution.Inputindica que la clave FieldA recupera dinámicamente el valor de$Context.Execution.Inputen lugar de tratarse como una cadena de texto.FieldB: Worldindica que la cadena estática 'World' se asigna a FieldB. No se recupera ningún valor dinámicamente porque la clave FieldB no termina con el marcador .$.FieldC.$: length($Context.Execution.Input)indica que se utiliza la función integrada length para obtener la longitud del valor en$Context.Execution.Inputy asignar dicho resultado a FieldC. Para obtener información sobre las funciones integradas disponibles en los constructores, consulte Built-in functions.La expresión
FieldD.$: $Global. InvokeFunctionPayloadextrae el valor de la claveInvokeFunctionPayloaddel espacio de almacenamiento global y pasa dicho valor como campoFieldDal estadoTask.
OutputConstructor
En comparación con InputConstructor, OutputConstructor se ejecuta en un momento diferente y admite más variables en las expresiones de contexto. Por ejemplo, mientras que en un constructor de entrada solo puede usar $Context o $Input, en un constructor de salida puede emplear $Output para representar la salida, ya que la llamada de tarea ya generó dicha salida. Puede utilizar las siguientes variables de sistema en el OutputConstructor del estado:
$Context
$Input
$Output
$Global
La siguiente definición de máquina de estados proporciona un ejemplo de cómo utilizar 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
En el ejemplo anterior, la estructura de datos de
OutputConstructores map[string]any.functionResult.$recupera dinámicamente la salida del estado,executionInput.$recupera dinámicamente la entrada de la ejecución ylastOutput.$recupera dinámicamente la entrada del estado.returnID.$recupera el ID único, yfunctionResultStr.$recupera una cadena generada a partir de la salida del estado.