coreBOS story: workflows programmati

Questa settimana Joe Bordes approfondisce uno strumento fondamentale di coreBOS: la programmazione dei workflows. L’articolo originale in inglese si trova sul blog ufficiale del progetto.

3c687ae4efa1c5197b3843674a24362dee6337f2-scheduledwf.jpeg

La possibilità di lanciare tasks basati sul tempo è fondamentale per qualsiasi applicazione come coreBOS, quindi abbiamo aggiunto questa funzionalità. Spiegherò tutto in questo post.

Nel marzo 2015 abbiamo lanciato i workflows basati sul tempo. In altre parole, il sistema può ora fare qualcosa in modo automatico una volta alla settimana, due volte al giorno, ogni ora, un mese sì e uno no…

I diversi lanci temporali sono:

  • Orari: il workflow viene eseguito ogni ora
  • Giornalieri: il workflow viene eseguito ogni giorno ad un’ora specifica
  • Settimanali: il workflow viene eseguito in giorni specifici di ogni settimana
  • Su una data specifica: il workflow viene eseguito nella data selezionata
  • Su data mensile: il workflow viene eseguito su giorni specifici ogni mese
  • Annuale: il workflow viene eseguito su un giorno specifico ogni anno

L’innesco di questo workflow è fondamentalmente differente dagli altri. Tutti gli altri inneschi nel sistema vengono lanciati su un record individuale, quando accade qualcosa a quel record, solitamente un’azione di salvataggio ma anche quando viene cancellato.

I workflow programmati “si svegliano” nel momento stabilito e lanciano una query. Poi lanciano i task di workflow associati per ogni record che ottengono dalla query.

Le implicazioni sono diverse.

  1. Quando definiamo le condizioni dobbiamo pensare ai set dei records a cui stiamo tentando di accedere. Non definiamo condizioni su un record ma sull’intero set di record nel modulo.
  2. Ci sono condizioni che non esistono, come “è cambiato”. Non stiamo salvando nulla, solo recuperando informazioni dal database, niente è cambiato.
  3. Alcuni task possono essere pericolosi e devono essere usati con cautela. Per esempio, creando un task di aggiornamento si riscriveranno i campi per tutti i record che soddisfano le condizioni senza opzioni per ottenere il valore precedente (beh, più o meno, dipende dalla configurazione), quindi è bene stare attenti e accertarsi di aver ottenuto il giusto record.
  4. Inoltre, bisogna considerare l’impatto che può avere un semplice workflow programmato. Seguendo l’esempio precedente, immaginiamo che l’aggiornamento workflow crei un’altra entità, modifichi alcuni altri campi ed invii un’e-mail. Ora immaginiamo che i workflow programmati recuperino 1000 record. È un lavoro notevole per il server ed un grande impatto nell’applicazione se si sbaglia.
  5. I workflow programmati sono limitati a 10 nel tentativo di minimizzare il sovraccarico del server, ma questo può essere configurato impostando la variabile globale Workflow_Maximum_Scheduled. Il mio suggerimento è di pianificare i workflow programmati con attenzione, distribuirli attraverso la giornata, non impostarli tutti alla stessa ora.
  6. Dal momento in cui i workflow programmati sono basati sulla temporalità e non è possibile utilizzare espressioni nelle condizioni, ci sono alcuni operatori speciali per i workflow programmati come:
  • Meno di ore/giorni prima
  • Meno di ore/giorni dopo
  • Più di ore/giorni prima
  • Più di ore/giorni dopo

sworkflow.png

Lo strumento evalwf

Lo strumento evalwf supporta i workflow programmati. È uno strumento molto potente che dovremmo integrare direttamente nell’applicazione. Quando viene lanciato su un workflow programmato, questo strumento mostra la query che è stata creata così da permettere di valutare se è quello che si sta cercando (se si sa come leggere SQL e si ha una conoscenza della struttura del database). Ecco alcuni screenshot di esempio

Il Delayed Task Workflow di default

evalwf_swf.png

Il Delayed Task Workflow, task di workflow

evalwf_swftask

Il risultato dell’esecuzione di evalwf su un task record

evalwf_swfresult.png

Informazioni aggiuntive

È possibile approfondire e trovare maggiori dettagli nel coreBOS Documentation Project: scheduled workflow page.

Grazie per la lettura!

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s