Aller au contenu

Aperçu des Tâches

Qu'est-ce qu'une tâche ?

Une tâche est l'unité d'exécution fondamentale d'un workflow. Chaque tâche représente une action unique effectuée sur un appareil Android — exécuter une commande shell, envoyer une requête HTTP, comparer des valeurs, détecter des erreurs, et bien plus encore.

Les tâches sont les nœuds du graphe de workflow. Le moteur d'exécution parcourt ce graphe à partir du nœud START et exécute chaque tâche dans l'ordre jusqu'à atteindre un nœud END.


Deux types de tâches

AndroMate distingue deux catégories de tâches, qui diffèrent dans la façon dont elles se connectent au reste du workflow.


1. Tâches Normales

Une tâche normale effectue une action spécifique et possède exactement un seul lien sortant. Une fois terminée, le moteur passe inconditionnellement à la tâche suivante définie par le champ "to".

Exemples : CmdStage, HttpRequest, Sleep, TextReport, GetCurrentLocation, DnsLookup, SetVariable, NtpSync, ScreenAutomator, etc.

Format JSON du lien :

{
  "from": "1",
  "to": "2"
}

Flux d'exécution :

[Tâche 1] ──→ [Tâche 2] ──→ [Tâche 3] ──→ ...

Exceptions de tâche

Chaque tâche normale peut générer une exception en cas de problème (échec réseau, erreur de l'appareil, délai d'attente dépassé, entrée invalide, etc.). Le moteur d'exécution enregistre cette exception dans le contexte d'exécution et l'associe à la tâche qui l'a déclenchée.

Une exception contient :

Champ Description
Code d'erreur Un identifiant numérique ou textuel du type d'erreur
Description Un message lisible expliquant ce qui s'est passé
ID de la tâche L'identifiant de la tâche qui a échoué

Le workflow ne s'arrête pas automatiquement sur une exception (sauf si la politique d'exécution est configurée à STOP_ON_ERROR). Vous pouvez inspecter explicitement la dernière exception grâce à la tâche conditionnelle dédiée : Exception ?.


2. Tâches Conditionnelles

Une tâche conditionnelle évalue une condition et retourne un résultat booléen (true ou false). Selon ce résultat, le moteur dirige l'exécution vers l'une de deux branches distinctes.

Exemples : CompareStrings, CompareNumber, AndromateException

Format JSON du lien :

{
  "from": "2",
  "true": "3",
  "false": "4"
}

Signification :

  • La condition de la tâche 2 est true → exécuter la tâche 3
  • La condition de la tâche 2 est false → exécuter la tâche 4

Flux d'exécution :

[Tâche Conditionnelle]
    ├─→ TRUE  ──→ [Branche A]
    └─→ FALSE ──→ [Branche B]

Tâches conditionnelles disponibles

Clé JSON Nom affiché Description
CompareStrings Comparer des chaînes Compare deux valeurs textuelles
CompareNumber Comparer des nombres Compare deux valeurs numériques
AndromateException Exception ? Vérifie si la tâche précédente a levé une exception

La tâche Exception ? (AndromateException)

La tâche Exception ? est une tâche conditionnelle spéciale dédiée à la gestion des erreurs. Elle inspecte le contexte d'exécution pour déterminer si la dernière tâche exécutée a produit une exception.

  • Retourne true — la tâche précédente a échoué (une exception a été levée)
  • Retourne false — la tâche précédente s'est terminée avec succès (aucune exception)

Placez-la après toute tâche susceptible d'échouer pour détecter les erreurs et bifurquer en conséquence. Elle peut également capturer les détails de l'exception dans des variables du workflow pour les rapports ou les traitements ultérieurs :

Champ JSON Description
code_output Variable pour stocker le code d'erreur
description_output Variable pour stocker la description de l'erreur
task_id_output Variable pour stocker l'ID de la tâche en échec

Exemple JSON :

{
  "CmdStage": [
    {
      "id": "1",
      "title": "Lancer le ping",
      "cmd_text": "ping -c 1 8.8.8.8"
    }
  ],

  "AndromateException": [
    {
      "id": "2",
      "title": "Exception ?",
      "code_output": "$code_erreur",
      "description_output": "$desc_erreur",
      "task_id_output": "$id_tache_echouee"
    }
  ],

  "TextReport": [
    {
      "id": "3",
      "title": "Journaliser l'erreur",
      "texte": "Tâche $id_tache_echouee en échec : [$code_erreur] $desc_erreur"
    },
    {
      "id": "4",
      "title": "Journaliser le succès",
      "texte": "Ping terminé avec succès"
    }
  ],

  "End": [{ "id": "100", "title": "Fin" }],

  "Links": [
    { "from": "0", "to": "1" },
    { "from": "1", "to": "2" },
    { "from": "2", "true": "3", "false": "4" },
    { "from": "3", "to": "100" },
    { "from": "4", "to": "100" }
  ]
}

Exécution du workflow sous forme de graphe

Les workflows sont représentés sous forme de graphes orientés. Le moteur d'exécution les parcourt en suivant cet algorithme :

  1. Démarrer au nœud START (point d'entrée du workflow)
  2. Exécuter la tâche courante
  3. Déterminer le nœud suivant :
  4. Tâche normale → suivre le lien "to"
  5. Tâche conditionnelle → évaluer la condition, puis suivre "true" ou "false"
  6. Répéter à partir de l'étape 2 avec le nœud suivant
  7. S'arrêter en atteignant un nœud END

Le graphe supporte les boucles (une tâche conditionnelle pointant vers une tâche antérieure), utiles pour la logique de nouvelle tentative ou d'attente. Un maximum de 5000 itérations est imposé pour éviter les boucles infinies.

flowchart TD
    START([▶ START]) --> T1[Tâche Normale 1]
    T1 --> T2[Tâche Normale 2]
    T2 --> COND{Tâche Conditionnelle}
    COND -->|TRUE| T3[Branche A]
    COND -->|FALSE| T4[Branche B]
    T3 --> END([⏹ END])
    T4 --> END

    style START fill:#e3f2fd
    style END fill:#c8e6c9
    style COND fill:#fff9c4
    style T3 fill:#e0f0e0
    style T4 fill:#ffe0e0

Récapitulatif des formats de liens

Type de tâche Champs JSON Chemins sortants Comportement
Tâche normale "from", "to" 1 Continue toujours vers "to"
Tâche conditionnelle "from", "true", "false" 2 Dirige vers "true" ou "false" selon l'évaluation

Lien normal associé

Chaque tâche normale est connectée par un lien normal. Elle possède exactement un chemin sortant — le workflow continue toujours vers "to" quel que soit le résultat de la tâche.

{ "from": "1", "to": "2" }
Champ Description
"from" ID de la tâche normale courante
"to" ID de la prochaine tâche à exécuter

Lien conditionnel associé

Chaque tâche conditionnelle est connectée par un lien conditionnel. Elle possède exactement deux chemins sortants — le moteur évalue le résultat booléen et dirige en conséquence.

{ "from": "2", "true": "3", "false": "4" }
Champ Description
"from" ID de la tâche conditionnelle
"true" ID de la tâche à exécuter si la condition vaut true
"false" ID de la tâche à exécuter si la condition vaut false