Aller au contenu

Ports et liaisons

Comprendre les ports, c’est comprendre quand une boîte s’exécute. Cette page est la référence du modèle.

Toute boîte les possède, sans qu’ils apparaissent dans sa configuration :

PortSensFluxRôle
inEntréeSignalDéclencheur. Plusieurs liaisons entrantes acceptées
errorSortieValeur + signalRoute d’échec
doneSortieSignalÉmis après complétion de la boîte et de tout son sous-graphe aval

Trois boîtes n’ont pas de port error : Sortie, Maintenant et Retry (cette dernière étant elle-même une frontière d’erreur). Deux n’ont pas de done : Sortie et Throw.

FluxSymbole mentalComportement
ValeurUne donnéeTransporte une valeur ; sert aussi de déclencheur
SignalUn topNe transporte rien, déclenche seulement
Les deuxTransporte une valeur et déclenche

La seule combinaison interdite : une sortie de signal pur vers une entrée de valeur pure. Il n’y aurait rien à mettre dans la valeur.

any · json · number · string · boolean · duration · response · status · list · object.

Le typage sert surtout au confort visuel, avec une exception stricte : une entrée de type liste (le port list des actions Ajouter à une liste et Retirer d’une liste) refuse une source qui n’est pas compatible liste. json et list sont compatibles entre eux ; un object simple ne l’est pas.

  • Un port d’entrée n’accepte qu’une seule liaison. C’est ce qui rend le graphe lisible : une valeur, une provenance.
  • Sauf in, qui accepte autant de liaisons que voulu.
  • Une sortie peut alimenter autant d’entrées que voulu.

Trois règles, dans l’ordre :

  1. Les racines démarrent. Toute boîte sans liaison entrante est amorcée au lancement du scénario. Il n’y a pas de boîte « départ ».
  2. Seules les entrées câblées sont attendues. Une boîte s’exécute quand chacun de ses ports d’entrée effectivement reliés a reçu une valeur. Un port non câblé n’est jamais attendu. Les valeurs restent mémorisées : une entrée conserve la dernière valeur reçue.
  3. Le port in fait barrière. Alimenté par plusieurs liaisons, il attend que toutes soient arrivées, puis déclenche une fois. C’est le « attendre que ces trois branches soient finies » du modèle.

L’exception : rejouer à chaque événement

Section titled “L’exception : rejouer à chaque événement”

L’option « Rejouer à chaque événement reçu » (menu contextuel de la boîte) transforme toutes les entrées câblées en portes « ou » non bloquantes : la boîte se redéclenche à chaque valeur reçue, sur n’importe quel port.

Deux usages : traiter un flux message par message, et débloquer un cycle de complétion (un graphe qui reboucle sur lui-même).

C’est la distinction la plus utile en pratique :

  • une sortie de valeur émet dès que la boîte a produit son résultat ;
  • done attend en plus que tout ce qui consomme ce résultat ait fini.

Pour séquencer — « fais tout ça, puis nettoie » — câblez depuis done. Pour passer une donnée, câblez depuis la sortie de valeur.

Ce ne sont pas un mécanisme à part : ce sont des ports de sortie porteurs d’un rôle, qui pilote leur couleur.

BoîteSorties
Ifthen / else
While, Do…Whilethen (le corps)
Assertthen (réussite) / else (échec)
Retryattempt / exhausted
Validation schémavalid / invalid / errors
Switchun port par cas, plus default
Connexion Socket.IOun port par événement déclaré, plus others

Une liaison peut porter un sélecteur : un chemin appliqué à la valeur en transit.

data.items[0].id
body['user-id']
headers["content-type"]
status

Les formes a.b, a[0], a['clé'] et a["clé"] sont acceptées. Un segment qui contient du JSON est analysé au vol ; un chemin qui ne correspond à rien donne undefined.

Restorm déduit parfois un sélecteur tout seul au moment du câblage, quand la source a un aperçu statique qui se réduit à une seule valeur primitive. Vous pouvez toujours le remplacer ou le vider.