Lorsqu'un workflow doit appliquer la même logique de traitement à chaque élément d'un tableau (validation d'un lot de commandes, redimensionnement d'images ou enrichissement d'enregistrements), l'état Map parcourt le tableau et exécute chaque élément via un sous-flux en parallèle. Ce fonctionnement s'apparente à une boucle foreach avec exécution concurrente. Les états Map s'exécutent en mode inline par défaut. Ce mode se concentre sur un nœud unique et convient aux scénarios où chaque élément d'une collection nécessite un traitement spécifique.
Fonctionnement
Extrayez un tableau de l'entrée à l'aide de l'expression
ItemsPath.Lancez un sous-flux indépendant pour chaque élément en exécutant les états définis dans
Processor.Exécutez tous les sous-flux en parallèle, dans la limite définie par
MaxConcuccency.Une fois tous les sous-flux terminés, fusionnez les résultats dans une sortie
map[string]anysous la cléItems.
Référence des champs
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| Name | string | Oui | Nom de l'état. |
| Type | string | Oui | Doit être Map. |
| ItemsPath | string | Oui | Expression qui extrait le tableau cible de l'entrée. Prend en charge les variables $Input et $Context. Voir ItemsPath. |
| Processor | Processor | Oui | Définition du sous-flux exécuté pour chaque élément du tableau. Voir Processor. |
| InputConstructor | map[string]any | Non | Construit ou remodèle l'entrée avant l'itération. Voir Entrées et sorties. |
| OutputConstructor | map[string]any | Non | Remodèle la sortie fusionnée une fois tous les sous-flux terminés. Voir OutputConstructor de l'état. |
| MaxConcuccency | int | Non | Nombre maximal de sous-flux parallèles. La limite supérieure est de 40. Voir MaxConcuccency. |
| Next | string | Non | État vers lequel basculer après la fin de l'exécution. Non requis si End a la valeur true. |
| End | bool | Non | Indique qu'il s'agit de l'état terminal de la portée actuelle. |
| Retry | Retry | Non | Politique de nouvelle tentative en cas d'erreur. Voir Gestion des erreurs. |
| Catch | Catch | Non | Politique de capture d'erreurs. Voir Gestion des erreurs. |
| Description | string | Non | Description de l'état. |
Champs clés
ItemsPath
Expression permettant d'extraire un tableau de l'entrée. Si l'expression renvoie un tableau JSON, l'état Map itère sur chaque élément et le transmet indépendamment au Processor.
Prend en charge les variables d'expression $Input et $Context :
$Input.FieldA
Cette expression extrait le tableau FieldA de l'entrée. Chaque élément est ensuite traité dans un sous-flux parallèle distinct.
Processor
Définit le sous-flux exécuté pour chaque élément du tableau.
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| StartAt | string | Oui | Premier état à exécuter dans le sous-flux. |
| States | array | Oui | États constituant le sous-flux. |
Exemple :
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
MaxConcuccency
Nombre maximal de sous-flux exécutés en parallèle. La limite supérieure est de 40.
Exemple
Le flux suivant définit un état Map qui itère sur un tableau de trois éléments. Chaque élément passe par un seul état 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
Entrée
InputConstructor génère l'entrée suivante :
{
"FieldA": [
{ "a": "b" },
{ "c": "d" },
{ "e": "f" }
]
}
Données reçues par chaque itération
ItemsPath extrait le tableau FieldA. Chaque sous-flux reçoit un élément en tant qu'entrée. Par exemple, la première itération reçoit :
{
"a": "b"
}
La deuxième itération reçoit { "c": "d" } et la troisième reçoit { "e": "f" }. Les trois sous-flux s'exécutent en parallèle.
Sortie
Une fois tous les sous-flux terminés, l'état Map fusionne les résultats sous la clé Items :
{
"Items": [
{ "a": "b" },
{ "c": "d" },
{ "e": "f" }
]
}
Pour remodeler cette sortie fusionnée, utilisez OutputConstructor.