Break
Résumé
- Nom interne :
Break - Catégorie : Control Flow
- Objectif : Arrêter immédiatement le connecteur de boucle englobant (
Iterate,ForEachElement, ouForEachElementInScreen) - le workflow externe continue ensuite normalement juste après la boucle. - Type de tâche : Normal
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
Description détaillée
La tâche Break est l'équivalent AndroMate du mot-clé break de Java. Placée dans le sous-workflow "do" d'un connecteur de boucle (Iterate, ForEachElement, ou ForEachElementInScreen), elle arrête cette boucle immédiatement : le passage en cours s'arrête à cet endroit précis (toute tâche placée après Break dans le même "do" est ignorée), aucune itération supplémentaire ne s'exécute, et l'exécution reprend à la tâche qui suit le connecteur de boucle dans le graphe externe - exactement comme si la plage/liste/liste d'éléments avait été entièrement parcourue.
Break n'a de sens que dans le sous-workflow "do" d'un connecteur de boucle. Elle n'a aucune signification particulière ailleurs dans un workflow - voir Exceptions ci-dessous.
Break ne prend jamais d'entrée et ne produit jamais de variable - c'est un pur signal de contrôle de flux, généralement placé derrière la branche true d'une tâche condition (CompareStrings, CompareNumber, IsElementExist) pour que la boucle ne s'arrête qu'une fois une cible trouvée.
Paramètres d'entrée
Cette tâche n'a aucun paramètre d'entrée.
Paramètres de sortie
Cette tâche ne produit aucune variable de sortie. Elle retourne un VoidResult en cas de succès.
Exceptions
| Code | Nom de l'exception | Description |
|---|---|---|
ITERATE-PIPELINE-007 |
Loop Break Requested | Signal interne qui arrête la boucle englobante. Jamais visible quand Break est utilisée correctement dans le "do" d'un connecteur de boucle - ne remonte comme erreur non gérée que si Break est placée en dehors de tout sous-workflow de connecteur de boucle (il n'y a alors aucune boucle pour l'intercepter). |
Diagramme d'exécution
flowchart TD
B([Break]) --> SetFlag[Demande de break sur ce sous-workflow do]
SetFlag --> Return([VoidResult])
Return -.->|prochaine vérification, même do| Check{Break demandé ?}
Check -->|Oui| Throw[ITERATE-PIPELINE-007\nLOOP_BREAK_REQUESTED]
Throw --> Catch[Intercepté par le connecteur\nde boucle englobant]
Catch --> StopLoop[Arrêt de la boucle\naucune itération de plus]
StopLoop --> Continue[Suivre le lien externe 'to'\ndu connecteur de boucle]
Continue --> Success([Le workflow externe continue])
style B fill:#e3f2fd
style Success fill:#c8e6c9
style Throw fill:#ffcdd2
style SetFlag fill:#fff9c4
style StopLoop fill:#fff9c4
Comment ça fonctionne :
- Poser le flag :
Breakdemande un break sur leTaskGraphControlattaché au sous-workflow"do"dans lequel elle s'exécute, puis retourne immédiatementVoidResult- rien n'est levé à ce stade. - Détecté à la prochaine vérification : juste avant d'exécuter le nœud suivant dans ce même parcours
"do", le moteur remarque le flag et lèveLOOP_BREAK_REQUESTED- toute tâche placée aprèsBreakdans ce passage ne s'exécute jamais. - Intercepté par la boucle : le connecteur de boucle englobant (
Iterate,ForEachElement, ouForEachElementInScreen) intercepte ce signal précis, nettoie le flag, et arrête de boucler - comme si la plage/liste/liste d'éléments avait été entièrement parcourue. - Le workflow externe continue : l'exécution reprend normalement à la tâche qui suit le connecteur de boucle dans le graphe externe.
Exemples de code
Exemple 1 - Arrêter une recherche ForEachElementInScreen une fois la cible trouvée
"do": {
"StartSubTask": [{ "id": "20001" }],
"CompareStrings": [
{ "id": "20002", "var_x": "$elementText", "var_y": "Submit", "compare_type": "Equal" }
],
"Break": [{ "id": "20003" }],
"End": [{ "id": "20004" }],
"Links": [
{ "from": "20001", "to": "20002" },
{ "from": "20002", "true": "20003", "false": "20004" },
{ "from": "20003", "to": "20004" }
]
}
Détails des paramètres d'entrée
Cette tâche n'a aucun paramètre d'entrée.
Détails des paramètres de sortie
Cette tâche n'a aucun paramètre de sortie.
Exemple JSON complet
Boucle de 1 à 10 en affichant chaque nombre, mais sort de la boucle (sans afficher) dès que $i atteint 5 - donc elle affiche seulement 1 à 4 :
{
"Start": [
{ "id": "1000", "variables": [{ "variableName": "$i", "variableValue": "0", "is_kpi": false }] }
],
"Iterate": [
{
"id": "1001",
"title": "Afficher jusqu'à 5",
"iteration_variable_input": "$i",
"start_index": 1,
"end_index": 10,
"do": {
"StartSubTask": [{ "id": "10001" }],
"CompareNumber": [
{ "id": "10002", "num_x": "$i", "num_y": "5", "compare_type": 1 }
],
"TextReport": [
{ "id": "10003", "texte": "Numéro d'itération : $i", "texte_type": 0 }
],
"Break": [{ "id": "10004" }],
"End": [{ "id": "10005" }],
"Links": [
{ "from": "10001", "to": "10002" },
{ "from": "10002", "true": "10004", "false": "10003" },
{ "from": "10003", "to": "10005" },
{ "from": "10004", "to": "10005" }
]
}
}
],
"End": [{ "id": "1002" }],
"Links": [
{ "from": "1000", "to": "1001" },
{ "from": "1001", "to": "1002" }
]
}