Salta ai contenuti

Porte e collegamenti

Capire le porte significa capire quando un riquadro si esegue. Questa pagina è il riferimento del modello.

Ogni riquadro le possiede, senza che compaiano nella sua configurazione:

PortaVersoFlussoRuolo
inInputSegnaleGrilletto. Sono accettati più collegamenti in ingresso
errorOutputValore + segnaleVia di fallimento
doneOutputSegnaleEmesso dopo il completamento del riquadro e di tutto il suo sottografo a valle

Tre riquadri non hanno porta error: Uscita, Adesso e Retry (quest’ultimo è esso stesso una frontiera di errore). Due non hanno done: Uscita e Throw.

FlussoSimbolo mentaleComportamento
ValoreUn datoTrasporta un valore; serve anche da grilletto
SegnaleUn impulsoNon trasporta nulla, si limita a innescare
EntrambiTrasporta un valore e innesca

La sola combinazione vietata: un’uscita di puro segnale verso un input di puro valore. Non ci sarebbe nulla da mettere nel valore.

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

La tipizzazione serve soprattutto al comfort visivo, con un’eccezione stretta: un input di tipo lista (la porta list delle azioni Aggiungi a un elenco e Rimuovi da un elenco) rifiuta una sorgente che non sia compatibile con una lista. json e list sono compatibili tra loro; un semplice object non lo è.

  • Una porta di input accetta un solo collegamento. È ciò che rende il grafo leggibile: un valore, una provenienza.
  • Tranne in, che accetta quanti collegamenti si vogliono.
  • Un’uscita può alimentare quanti input si vogliono.

Tre regole, in quest’ordine:

  1. Le radici partono. Ogni riquadro senza collegamenti in ingresso viene innescato al lancio dello scenario. Non esiste un riquadro «partenza».
  2. Vengono attesi soltanto gli input cablati. Un riquadro si esegue quando ciascuna delle sue porte di input effettivamente collegate ha ricevuto un valore. Una porta non cablata non viene mai attesa. I valori restano memorizzati: un input conserva l’ultimo valore ricevuto.
  3. La porta in fa da barriera. Alimentata da più collegamenti, attende che tutti siano arrivati, poi innesca una volta. È il «attendere che questi tre rami siano finiti» del modello.

L’opzione «Riesegui a ogni evento ricevuto» (menu contestuale del riquadro) trasforma tutti gli input cablati in porte «or» non bloccanti: il riquadro si riattiva a ogni valore ricevuto, su qualunque porta.

Due usi: elaborare un flusso messaggio per messaggio e sbloccare un ciclo di completamento (un grafo che si richiude su se stesso).

È la distinzione più utile in pratica:

  • un’uscita di valore emette appena il riquadro ha prodotto il suo risultato;
  • done attende inoltre che tutto ciò che consuma quel risultato abbia finito.

Per mettere in sequenza — «fai tutto questo, poi ripulisci» — si cabla da done. Per passare un dato, si cabla dall’uscita di valore.

Non sono un meccanismo a parte: sono porte di output portatrici di un ruolo, che ne governa il colore.

RiquadroUscite
Ifthen / else
While, Do…Whilethen (il corpo)
Assertthen (successo) / else (fallimento)
Retryattempt / exhausted
Validazione dello schemavalid / invalid / errors
Switchuna porta per caso, più default
Connessione Socket.IOuna porta per evento dichiarato, più others

Un collegamento può portare un selettore: un percorso applicato al valore in transito.

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

Sono accettate le forme a.b, a[0], a['clé'] e a["clé"]. Un segmento che contiene JSON viene analizzato al volo; un percorso che non corrisponde a nulla dà undefined.

Restorm a volte deduce un selettore da solo al momento del cablaggio, quando la sorgente ha un’anteprima statica che si riduce a un unico valore primitivo. È sempre possibile sostituirlo o svuotarlo.