Aller au contenu

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 :

    • ✅ Tous les constructeurs
  • Permissions requises :

    • Aucune (les permissions dépendent entièrement des tâches placées dans "do")

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 :

  1. Valider element_variable_input : lève COLLECTION-TASK-002 s'il est vide ou n'est pas une référence $variable.
  2. Vérifier do : lève CONNECTOR-TASK-ERROR-001 si le sous-workflow est manquant ou vide.
  3. Boucle : pour chaque élément de list_variable_input, dans l'ordre :
  4. écrit l'élément dans element_variable_input,
  5. exécute le sous-workflow "do" jusqu'à la fin (de son StartSubTask à son End).
  6. 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

"list_variable_input": "$ma_liste"

Détails

  • Doit commencer par $ et doit déjà être déclarée dans le Start.variables externe (typiquement construite avec InitList/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

"element_variable_input": "$item"

Détails

  • Doit commencer par $ et doit déjà être déclarée dans le Start.variables externe.
  • 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": "0",
      "variables": [
        { "variableName": "$ma_liste", "variableValue": "[]", "is_kpi": false },
        { "variableName": "$item", "variableValue": "", "is_kpi": false }
      ]
    }
  ],
  "InitList": [
    { "id": "1", "list_variable_input": "$ma_liste" }
  ],
  "ListAdd": [
    { "id": "2", "list_variable_input": "$ma_liste", "value_input": "111" },
    { "id": "3", "list_variable_input": "$ma_liste", "value_input": "222" },
    { "id": "4", "list_variable_input": "$ma_liste", "value_input": "333" }
  ],
  "ForEachElement": [
    {
      "id": "5",
      "title": "Notifier chaque destinataire",
      "list_variable_input": "$ma_liste",
      "element_variable_input": "$item",
      "do": {
        "StartSubTask": [{ "id": "sub-0" }],
        "SendSMS": [
          { "id": "sub-1", "msisdn": "$item", "message_body": "Bonjour !" }
        ],
        "End": [{ "id": "sub-100" }],
        "Links": [
          { "from": "sub-0", "to": "sub-1" },
          { "from": "sub-1", "to": "sub-100" }
        ]
      }
    }
  ],
  "End": [{ "id": "100" }],
  "Links": [
    { "from": "0", "to": "1" },
    { "from": "1", "to": "2" },
    { "from": "2", "to": "3" },
    { "from": "3", "to": "4" },
    { "from": "4", "to": "5" },
    { "from": "5", "to": "100" }
  ]
}