Skip to content

Appeler un workflow ​

Exécute un autre workflow publié, avec les données de cette exécution. En mode « attendre », sa sortie devient celle du nœud.

Le nœud Appeler un workflow exécute un autre workflow publié. Il permet d’écrire une routine une fois, par exemple un accusé de réception ou une recherche de contact, et de la réutiliser depuis plusieurs workflows au lieu de la dupliquer. Le workflow appelé est référencé par son identifiant : le renommer, ou renommer ses nœuds, ne casse rien côté appelant.

Le workflow appelé doit être publié et commencer par le déclencheur Appelé par un workflow. Il reçoit toutes les données de travail de l’appelant sous {{ data.input }}, par exemple {{ data.input.<étape appelante>.montant }}, et il conserve le mail déclencheur de l’appelant : {{ email.subject }} y fonctionne donc aussi. Il s’exécute pour le même membre et dans le même mode : un test appelle un test.

Deux modes sont proposés :

  • Attendre la fin (wait) : l’exécution appelante se suspend jusqu’à la fin de l’exécution appelée, puis continue par main. Ce que le workflow appelé a produit devient {{ data.<step>.output }}.
  • Lancer et continuer (fireAndForget) : le workflow appelé part de son côté et l’appelant continue aussitôt. Son issue n’est visible que dans ses propres exécutions.

En bref ​

  • Type : workflow.call · version 1
  • Catégorie : Logique
  • Nature : Étape — s’exécute pendant une exécution
  • Effet : Sans effet externe (none) — rien n’est écrit hors de Mankomail ; rejouable sans risque
  • Exige un mail porteur : Non
  • Connexion : Aucune
  • Entrées : main
  • Sorties : main

Paramètres ​

workflowId ​

Workflow à appeler — Le workflow cible, choisi dans la liste. Il doit être publié et son déclencheur doit être « Appelé par un autre workflow ».

  • Type : Texte (string)
  • Requis : Oui
  • Défaut : "" (vide)
  • 128 caractères au plus
  • Expressions : {{ }} refusé

mode ​

Mode

  • Type : Un choix (options)
  • Requis : Oui
  • Défaut : wait
  • Options :
    • wait — Attendre la fin : L’exécution se suspend, et la sortie du sous-workflow devient celle du nœud.
    • fireAndForget — Lancer et continuer : Le sous-workflow part de son côté ; la suite s’exécute immédiatement.

waitMinutes ​

Attente maximale (minutes) — Passé ce délai, la branche repart avec status: "timeout". Une exécution ne reste jamais en attente indéfiniment.

  • Type : Nombre (number)
  • Requis : Non
  • Défaut : 60
  • Nombre entier, de 1 à 4320
  • Affiché quand : mode vaut wait

Sorties ​

  • main — « Attendre la fin » : emprunté quand le workflow appelé s’est terminé avec succès, ou quand l’attente maximale est écoulée (status timeout). « Lancer et continuer » : emprunté aussitôt l’appel fait.

Données produites ​

Ce que ce nœud ajoute aux données de l’exécution, et comment le lire dans une expression. <step> désigne la clé de l’étape : le nom du nœud ramené à un identifiant (voir Données et expressions).

  • {{ data.<step>.executionId }} — string. L’identifiant de l’exécution lancée pour le workflow appelé.
  • {{ data.<step>.workflowId }} — string. L’identifiant du workflow appelé.
  • {{ data.<step>.mode }} — string. wait ou fireAndForget. Absent après une attente terminée.
  • {{ data.<step>.status }} — string. « Attendre la fin » : succeeded une fois le workflow appelé terminé, timeout quand l’attente maximale s’est écoulée avant, settled (sans output) dans le cas rare où il était déjà terminé au retour de l’appel. « Lancer et continuer » : started.
  • {{ data.<step>.output }} — object. « Attendre la fin » uniquement : tout ce que le workflow appelé a produit, sous les noms de ses propres nœuds — par exemple {{ data.<step>.output.<étape appelée>.message }}.
  • {{ data.<step>.simulated }} — boolean. true quand l’appel a eu lieu en essai (le workflow appelé s’exécute alors aussi en essai).

Example ​

Un workflow « Retrouver le client », déclenché par Appelé par un workflow, cherche {{ data.input.extraire.email }} dans une table et rédige une synthèse dans un nœud nommé Synthèse. Dans chaque workflow qui en a besoin, ajoutez :

workflowId:  <Retrouver le client>
mode:        wait
waitMinutes: 10

Après l’appel, {{ data.<step>.output.synthese.message }} contient la synthèse, et {{ data.<step>.status }} vaut succeeded.

Tips ​

  • Les échecs se propagent. Quand le workflow appelé échoue ou est annulé, l’étape appelante échoue avec subworkflow_failed, et la politique d’erreur du nœud appelant s’applique.
  • Attente maximale. En mode attente, passé « Attente maximale (minutes) » (60 par défaut, de 1 à 4 320, soit 3 jours), l’appelant cesse d’attendre et continue par main avec le status timeout. Le workflow appelé n’est pas interrompu. Testez status avec une Condition quand une réponse tardive compte.
  • Bornes. Une chaîne d’appels est limitée à trois niveaux sous la première exécution, et un workflow ne peut pas s’appeler lui-même, directement ou non : un cycle visible dans les graphes est refusé à la publication, et un cycle apparu plus tard (après une republication) échoue à l’exécution.
  • Refus à l’exécution. L’étape échoue quand la cible est inconnue ou appartient à un autre membre, archivée, non publiée, ou sans déclencheur Appelé par un workflow actif.
  • Une étape retentée ne lance jamais deux fois le workflow appelé.
  • Si le workflow appelé a aussi d’autres déclencheurs, un appel n’exécute que la partie de son graphe reliée à Appelé par un workflow.