For Each Element
Résumé
- Nom interne :
ForEachElement - Catégorie : Collections
- Objectif : Exécuter un sous-workflow imbriqué une fois par élément d'une variable liste, en exposant l'élément courant dans une variable de boucle.
- Type de tâche : Connecteur - voir Aperçu des Tâches > Tâches Connecteur pour comprendre ce que cela signifie avant de continuer.
Compatibilité
-
Version minimale AndroMate :
1.1.0 -
Version maximale AndroMate :
1.1.0 -
Android minimum :
Android 13 (API 33) -
Android maximum testé :
Android 16 (API 36) -
Constructeurs supportés :
- Samsung (One UI 6.x / 7.x / 8.x)
- Autres constructeurs - pas encore supportés (Xiaomi HyperOS et Google Pixel en cours d'adaptation)
-
Permissions requises :
- Aucune (les permissions dépendent entièrement des tâches placées dans
"do")
- Aucune (les permissions dépendent entièrement des tâches placées dans
Description détaillée
La tâche For Each Element parcourt une variable liste et exécute le sous-workflow intégré sous sa clé "do" une fois par élément, en écrivant l'élément courant dans element_variable_input avant chaque passage - l'équivalent en itération de liste de la boucle numérique Iterate.
Dans le graphe externe, ForEachElement se comporte exactement comme une tâche normale - un lien entrant, un lien sortant "to", suivi une fois que chaque élément a été traité. Toute la répétition se produit à l'intérieur de la tâche, pas dans les Links du graphe.
Le sous-workflow sous "do" partage le même dictionnaire de variables que le reste du workflow : il peut lire toute variable déclarée dans le Start externe, et toute sortie qu'il produit est visible par les tâches qui suivent ForEachElement dans le graphe externe également.
Paramètres d'entrée
| Paramètre | Type | Obligatoire | Valeurs possibles | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|---|
list_variable_input |
String | Oui | Nom d'une variable liste déclarée commençant par $ |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | [] |
element_variable_input |
String | Oui | Nom d'une variable déclarée commençant par $ |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | "" |
do |
Object (sous-workflow) | Oui | Un objet workflow imbriqué - voir Le sous-workflow do d'Iterate pour la forme (identique ici) |
Android 13 (API 33) -> Android 16 (API 36) | 1.1.0 -> 1.1.0 | - |
Paramètres de sortie
La tâche For Each Element ne produit elle-même aucune sortie. Toute variable écrite par une tâche dans "do" met à jour le contexte partagé du workflow normalement, comme si cette tâche s'exécutait directement dans le graphe externe.
Exceptions
| Code | Nom de l'exception | Description |
|---|---|---|
COLLECTION-TASK-002 |
Nom de variable liste invalide | element_variable_input est vide, ou n'est pas une référence $variable valide. |
CONNECTOR-TASK-ERROR-001 |
Aucune sous-tâche | Le champ "do" est manquant ou vide - une tâche connecteur doit contenir un sous-workflow à exécuter. |
Remarque : une list_variable_input vide n'est pas une erreur - la boucle s'exécute simplement zéro fois.
Diagramme d'exécution
flowchart TD
Start([ForEachElement]) --> CheckVar{element_variable_input\nvariable $ valide ?}
CheckVar -->|Non| E1[COLLECTION-TASK-002\nLIST_VARIABLE_NAME_INVALID]
CheckVar -->|Oui| CheckDo{Sous-workflow do\nprésent ?}
CheckDo -->|Non| E2[CONNECTOR-TASK-ERROR-001\nNO_SUB_TASKS]
CheckDo -->|Oui| Loop[i = 0]
Loop --> CheckSize{i < list.size ?}
CheckSize -->|Non| Continue[Suivre le lien externe 'to']
CheckSize -->|Oui| SetVar[Définir element_variable_input = list#91;i#93;]
SetVar --> RunSub[Exécuter le sous-workflow do]
RunSub --> Increment[i = i + 1]
Increment --> CheckSize
Continue --> Success([VoidResult])
E1 --> Error([Exception])
E2 --> Error
style Start fill:#e3f2fd
style Success fill:#c8e6c9
style Error fill:#ffcdd2
style RunSub fill:#fff9c4
style SetVar fill:#c8e6c9
Comment ça fonctionne :
- Valider
element_variable_input: lèveCOLLECTION-TASK-002s'il est vide ou n'est pas une référence$variable. - Vérifier
do: lèveCONNECTOR-TASK-ERROR-001si le sous-workflow est manquant ou vide. - Boucle : pour chaque élément de
list_variable_input, dans l'ordre : - écrit l'élément dans
element_variable_input, - exécute le sous-workflow
"do"jusqu'à la fin (de sonStartSubTaskà sonEnd). - Continuer : une fois chaque élément traité (ou immédiatement, si la liste est vide), le moteur suit le lien externe
"to".
Détails des paramètres d'entrée
1. Paramètre d'entrée : list_variable_input
Le nom d'une variable liste déclarée à parcourir.
Exemple
Détails
- Doit commencer par
$et doit déjà être déclarée dans leStart.variablesexterne (typiquement construite avecInitList/ListAdd).
2. Paramètre d'entrée : element_variable_input
Le nom d'une variable déclarée qui reçoit l'élément courant (sous forme de chaîne) avant chaque passage.
Exemple
Détails
- Doit commencer par
$et doit déjà être déclarée dans leStart.variablesexterne. - Lu comme un nom de variable littéral - aucune résolution appliquée à ce champ lui-même.
Exemple JSON complet
Construit une liste de 3 éléments et envoie un SMS par élément :
{
"Start": [
{
"id": "1000",
"variables": [
{ "variableName": "$ma_liste", "variableValue": "[]", "is_kpi": false },
{ "variableName": "$item", "variableValue": "", "is_kpi": false }
]
}
],
"InitList": [
{ "id": "1001", "list_variable_input": "$ma_liste" }
],
"ListAdd": [
{ "id": "1002", "list_variable_input": "$ma_liste", "value_input": "111" },
{ "id": "1003", "list_variable_input": "$ma_liste", "value_input": "222" },
{ "id": "1004", "list_variable_input": "$ma_liste", "value_input": "333" }
],
"ForEachElement": [
{
"id": "1005",
"title": "Notifier chaque destinataire",
"list_variable_input": "$ma_liste",
"element_variable_input": "$item",
"do": {
"StartSubTask": [{ "id": "10001" }],
"SendSMS": [
{ "id": "10002", "msisdn": "$item", "message_body": "Bonjour !" }
],
"End": [{ "id": "10003" }],
"Links": [
{ "from": "10001", "to": "10002" },
{ "from": "10002", "to": "10003" }
]
}
}
],
"End": [{ "id": "1006" }],
"Links": [
{ "from": "1000", "to": "1001" },
{ "from": "1001", "to": "1002" },
{ "from": "1002", "to": "1003" },
{ "from": "1003", "to": "1004" },
{ "from": "1004", "to": "1005" },
{ "from": "1005", "to": "1006" }
]
}