Aller au contenu

Iterate

Résumé

  • Nom interne : Iterate
  • Catégorie : Control Flow
  • Objectif : Exécuter un sous-workflow imbriqué une fois par entier d'une plage, en exposant la valeur courante 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 Iterate est la boucle for native d'AndroMate. Elle exécute le sous-workflow intégré sous sa clé "do" une fois pour chaque entier de start_index à end_index inclus, en écrivant la valeur courante dans iteration_variable_input avant chaque passage.

Dans le graphe externe, Iterate se comporte exactement comme une tâche normale — un lien entrant, un lien sortant "to", suivi une fois que chaque passage de la boucle est terminé. 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 (ex. depuis une tâche à l'intérieur de la boucle) est visible par les tâches qui suivent Iterate dans le graphe externe également.


Paramètres d'entrée

Paramètre Type Obligatoire Valeurs possibles Compatibilité Android Compatibilité AndroMate Défaut
iteration_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 ""
start_index Integer Non Tout entier Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 0
end_index Integer Non Tout entier ≥ start_index pour boucler réellement Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 0
do Object (sous-workflow) Oui Un objet workflow imbriqué — voir Le sous-workflow do ci-dessous Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0

Paramètres de sortie

La tâche Iterate 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
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 : start_index > end_index n'est pas une erreur — la boucle s'exécute simplement zéro fois.


Diagramme d'exécution

flowchart TD
    Start([▶ Iterate]) --> CheckDo{Sous-workflow do\nprésent ?}
    CheckDo -->|Non| E1[❌ CONNECTOR-TASK-ERROR-001\nNO_SUB_TASKS]
    CheckDo -->|Oui| Loop[i = start_index]
    Loop --> CheckRange{i <= end_index ?}
    CheckRange -->|Non| Continue[➡️ Suivre le lien externe 'to']
    CheckRange -->|Oui| SetVar[💾 Définir iteration_variable_input = i]
    SetVar --> RunSub[▶ Exécuter le sous-workflow do]
    RunSub --> Increment[i = i + 1]
    Increment --> CheckRange

    Continue --> Success([✅ VoidResult])
    E1 --> Error([❌ Exception])

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Error fill:#ffcdd2
    style RunSub fill:#fff9c4
    style SetVar fill:#c8e6c9

Comment ça fonctionne :

  1. Vérifier do : lève CONNECTOR-TASK-ERROR-001 si le sous-workflow est manquant ou vide.
  2. Boucle : pour i de start_index à end_index inclus :
  3. écrit i dans iteration_variable_input,
  4. exécute le sous-workflow "do" jusqu'à la fin (de son StartSubTask à son End).
  5. Continuer : une fois chaque passage terminé (ou immédiatement, si start_index > end_index), le moteur suit le lien externe "to".

Le sous-workflow do

do est un objet workflow imbriqué, structuré comme un workflow normal mais utilisant StartSubTask au lieu de Start comme point d'entrée :

"do": {
  "StartSubTask": [{ "id": "sub-0" }],
  "TextReport": [
    { "id": "sub-1", "texte": "Numéro d'itération : $i", "texte_type": 0 }
  ],
  "End": [{ "id": "sub-100" }],
  "Links": [
    { "from": "sub-0", "to": "sub-1" },
    { "from": "sub-1", "to": "sub-100" }
  ]
}
  • StartSubTask ne prend qu'un "id" — sans variables, Time_out, ni exec_policy (qui appartiennent exclusivement au Start réel du workflow externe).
  • N'importe quel type de tâche peut être utilisé à l'intérieur, y compris un autre Iterate ou ForEachElement pour des boucles imbriquées.
  • Donnez aux ids du sous-workflow un motif distinct (ex. un préfixe sub-) pour qu'ils ne puissent jamais entrer en collision avec les ids du graphe externe.
  • Les propres Links/End du sous-workflow sont limités à lui-même — ils n'interagissent pas avec les Links du graphe externe.

Détails des paramètres d'entrée

1. Paramètre d'entrée : iteration_variable_input

Le nom d'une variable déclarée qui reçoit l'index de boucle courant (sous forme de chaîne) avant chaque passage.

Exemple

"iteration_variable_input": "$i"

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 (même convention que variable_input de SetAndromateVariable).

2. Paramètre d'entrée : start_index / end_index

La plage entière inclusive à parcourir.

Exemple

"start_index": 1,
"end_index": 10

Détails

  • Tous deux optionnels — valent 0 par défaut.
  • Si start_index > end_index, le corps de la boucle ne s'exécute jamais (ce n'est pas une erreur).

Exemple JSON complet

Affiche "Numéro d'itération : 1" jusqu'à "Numéro d'itération : 5", avec la variable $i :

{
  "Start": [
    { "id": "0", "variables": [{ "variableName": "$i", "variableValue": "0", "is_kpi": false }] }
  ],
  "Iterate": [
    {
      "id": "1",
      "title": "Afficher de 1 à 5",
      "iteration_variable_input": "$i",
      "start_index": 1,
      "end_index": 5,
      "do": {
        "StartSubTask": [{ "id": "sub-0" }],
        "TextReport": [
          { "id": "sub-1", "texte": "Numéro d'itération : $i", "texte_type": 0 }
        ],
        "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": "100" }
  ]
}