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")
- 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": "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" }
]
}
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. - 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 de10001, en incrémentant à travers tous les"do"du même workflow plutôt que de recommencer. - 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": "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" }
]
}