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 :

    • 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")

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": "10001" }],
  "TextReport": [
    { "id": "10002", "texte": "Numéro d'itération : $i", "texte_type": 0 }
  ],
  "End": [{ "id": "10003" }],
  "Links": [
    { "from": "10001", "to": "10002" },
    { "from": "10002", "to": "10003" }
  ]
}
  • 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.
  • Tous les ids sont des entiers croissants, jamais un préfixe textuel. Numérotez le workflow externe à partir de 1000 ; numérotez chaque "do" (à n'importe quelle profondeur) à partir de 10001, en incrémentant à travers tous les "do" du même workflow plutôt que de recommencer.
  • 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": "1000", "variables": [{ "variableName": "$i", "variableValue": "0", "is_kpi": false }] }
  ],
  "Iterate": [
    {
      "id": "1001",
      "title": "Afficher de 1 à 5",
      "iteration_variable_input": "$i",
      "start_index": 1,
      "end_index": 5,
      "do": {
        "StartSubTask": [{ "id": "10001" }],
        "TextReport": [
          { "id": "10002", "texte": "Numéro d'itération : $i", "texte_type": 0 }
        ],
        "End": [{ "id": "10003" }],
        "Links": [
          { "from": "10001", "to": "10002" },
          { "from": "10002", "to": "10003" }
        ]
      }
    }
  ],
  "End": [{ "id": "1002" }],
  "Links": [
    { "from": "1000", "to": "1001" },
    { "from": "1001", "to": "1002" }
  ]
}