Cuando un flujo de trabajo necesita aplicar la misma lógica de procesamiento a cada elemento de un arreglo (como validar un lote de pedidos, redimensionar un conjunto de imágenes o enriquecer una lista de registros), el estado Map itera sobre el arreglo y ejecuta cada elemento mediante un subflujo en paralelo. Este comportamiento es similar a un bucle foreach con ejecución concurrente. Los estados Map se ejecutan en modo inline de forma predeterminada. El modo inline se centra en un solo nodo y resulta adecuado para escenarios en los que cada elemento de una colección requiere procesamiento.
Funcionamiento
Extraiga un arreglo de la entrada mediante la expresión
ItemsPath.Inicie un subflujo independiente para cada elemento y ejecute los estados definidos en
Processor.Ejecute todos los subflujos en paralelo hasta alcanzar el límite de
MaxConcuccency.Una vez completados todos los subflujos, combine los resultados en una salida de tipo
map[string]anybajo la claveItems.
Referencia de campos
|
Campo |
Tipo |
Obligatorio |
Descripción |
|
Name |
string |
Sí |
Nombre del estado. |
|
Type |
string |
Sí |
Debe ser |
|
ItemsPath |
string |
Sí |
Expresión que extrae el arreglo objetivo de la entrada. Admite las variables |
|
Processor |
Processor |
Sí |
Definición del subflujo que se ejecuta para cada elemento del arreglo. Consulte Processor. |
|
InputConstructor |
map[string]any |
No |
Construye o transforma la entrada antes de la iteración. Consulte Inputs and outputs. |
|
OutputConstructor |
map[string]any |
No |
Transforma la salida combinada después de completar todos los subflujos. Consulte State OutputConstructor. |
|
MaxConcuccency |
int |
No |
Número máximo de subflujos paralelos. El límite superior es 40. Consulte MaxConcuccency. |
|
Next |
string |
No |
Estado al que se transita tras la finalización. No es obligatorio si |
|
End |
bool |
No |
Marca este estado como el estado terminal del ámbito actual. |
|
Retry |
Retry |
No |
Política de reintentos ante errores. Consulte Error handling. |
|
Catch |
Catch |
No |
Política de captura de errores. Consulte Error handling. |
|
Description |
string |
No |
Descripción del estado. |
Campos clave
ItemsPath
Expresión que extrae un arreglo de la entrada. Si la expresión devuelve un arreglo JSON, el estado Map itera sobre cada elemento y lo pasa al Processor de forma independiente.
Admite las variables de expresión $Input y $Context:
$Input.FieldA
Esta instrucción extrae el arreglo FieldA de la entrada. Posteriormente, cada elemento se procesa en un subflujo paralelo independiente.
Processor
Define el subflujo que se ejecuta para cada elemento del arreglo.
|
Campo |
Tipo |
Obligatorio |
Descripción |
|
StartAt |
string |
Sí |
Primer estado que se ejecuta en el subflujo. |
|
States |
array |
Sí |
Estados que componen el subflujo. |
Ejemplo:
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
MaxConcuccency
Número máximo de subflujos que se ejecutan en paralelo. El límite superior es 40.
Ejemplo
El siguiente flujo define un estado Map que itera sobre un arreglo de tres elementos. Cada elemento pasa por un único estado Pass.
Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Map1
States:
- Type: Map
Name: Map1
End: true
InputConstructor:
FieldA:
- a: b
- c: d
- e: f
ItemsPath: $Input.FieldA
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
Entrada
InputConstructor genera la siguiente entrada:
{
"FieldA": [
{ "a": "b" },
{ "c": "d" },
{ "e": "f" }
]
}
Datos recibidos en cada iteración
ItemsPath extrae el arreglo FieldA. Cada subflujo recibe un elemento como entrada. Por ejemplo, la primera iteración recibe:
{
"a": "b"
}
La segunda iteración recibe { "c": "d" } y la tercera recibe { "e": "f" }. Los tres subflujos se ejecutan en paralelo.
Salida
Después de completar todos los subflujos, el estado Map combina los resultados bajo la clave Items:
{
"Items": [
{ "a": "b" },
{ "c": "d" },
{ "e": "f" }
]
}
Para transformar esta salida combinada, utilice OutputConstructor.