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")
- Aucune (les permissions dépendent entièrement des tâches placées dans
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 :
- Vérifier
do: lèveCONNECTOR-TASK-ERROR-001si le sous-workflow est manquant ou vide. - Boucle : pour
idestart_indexàend_indexinclus : - écrit
idansiteration_variable_input, - exécute le sous-workflow
"do"jusqu'à la fin (de sonStartSubTaskà sonEnd). - 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" }
]
}
StartSubTaskne prend qu'un"id"— sansvariables,Time_out, niexec_policy(qui appartiennent exclusivement auStartréel du workflow externe).- N'importe quel type de tâche peut être utilisé à l'intérieur, y compris un autre
IterateouForEachElementpour 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/Enddu sous-workflow sont limités à lui-même — ils n'interagissent pas avec lesLinksdu 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
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 (même convention que
variable_inputdeSetAndromateVariable).
2. Paramètre d'entrée : start_index / end_index
La plage entière inclusive à parcourir.
Exemple
Détails
- Tous deux optionnels — valent
0par 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" }
]
}