Automatizzare i progetti in OmniFocus 2 - parte seconda
Come promesso eccovi la seconda parte! Nell’articolo precedente su come automatizzare i progetti in OmniFocus, che qui darò per scontato, eravamo rimasti con alcuni problemi irrisolti:
- il computo dei termini che scadono al sabato e alla domenica e
- mi sono accorto del fatto che il modello poteva essere creato solo in uno specifico progetto di OmniFocus (nel mio caso il progetto “Test”).
Nell’articolo di oggi risolveremo assieme questi due problemi e, nel mentre, impareremo i rudimenti delle azioni per il conteggio e la modifica delle date in Workflow nonché l’utilizzo a nostro vantaggio delle azioni per i Dizionari.
Ma prima di entrare nel merito di questi due argomenti …
1. Un trucco (molto utile) per velocizzare la creazione dei modelli di OmniFocus in formato TaskPaper
Mentre facevo alcuni esperimenti per ultimare questo articolo mi sono accorto che c’è un’altro modo, più lineare e semplice, per creare un modello in formato testo compatibile TaskPaper.
Aprite OmniFocus e create un sotto-progetto con la struttura, anche complessa, delle attività che volete utilizzare come modello. A questo punto passate in modalità Split-view. Con il dito premete sulla voce principale del vostro modello. Si dovrebbe attivare il sistema di drag & drop di iOS 11. Trascinate quindi il modello da OmniFocus ad un programma che gestisca il testo. Quando l’elemento trascinato è sulla seconda applicazione e comparirà il simbolo “+” lasciate l’elemento. La struttura del vostro modello verrà convertita automaticamente in formato TaskPaper all’interno del secondo programma. Potrete quindi inserire tutte le date relative utilizzando anche segnaposto per Editorial o variabili in Workflow come vi ho spiegato nell’articolo precedente.
Qui sotto vedete, in una GIF animata, quello che ho spiegato a parole. L’operazione è veramente veloce e semplice.
Con questo metodo “empirico” non dovrete conoscere tutte le regole della formattazione in TaskPaper che vi ho spiegato nell’articolo precedente.
2. Salvare il modello in una pratica (progetto) a nostro piacimento usando i Dizionari di Workflow
L’azione Add TaskPaper to OmniFocus (Aggiungi TaskPaper in OmniFocus) come abbiamo visto al punto 5.8 dell’articolo precedente permette di salvare il modello all’interno di uno specifico progetto di OmniFocus.
Questa opzione è molto utile perché ci permette di creare dei modelli per le memorie 183, le note conclusionali o qualsiasi altra attività complessa e riutilizzare questo modello in più pratiche. È quindi importante poter modificare il nome del progetto in cui inserire i nostri modelli.
Si potrebbe inserire, come abbiamo visto al punto 5.6 e 5.7 dell’articolo precedente, una nuova richiesta del nome della pratica da passare poi ad una variabile che andremmo ad inserire al posto del nome del progetto nell’azione Add TaskPaper to OmniFocus. Questo approccio, tuttavia, non è efficace. Infatti dovremmo digitare l’intero nome della pratica in modo corretto altrimenti il flusso di lavoro di Workflow non generà il modello all’interno di quella specifica pratica.
Una soluzione a questo inconveniente ce la offrono le azioni legate al Dictionary (letteralmente Dizionario).
2.1 Ma cos’è un “Dictionary” ?
Banalizzando molto, un dizionario in Workflow è qualcosa di molto simile ad un dizionario di carta. Come in un dizionario di carta ad una parola corrisponde un significato così in d’un Dizionario di Workflow per una Chiave (Key) corrisponde un tipo di Valore (Value). I valori che possiamo associare ad una chiave sono di differenti tipi: Testo (Test), Numero (Number), Vettore (Array – un insieme di valori), Dizionario (Dictionary) e Boleano (Boolean – vero o falso).
Workflow ha svariate azioni che permettono di creare, modificare o estrarre dati da un Dizionario.
Di fatto con un dizionario è possibile passare un insieme di dati a Workflow su cui poi lavorare.
Se mi state seguendo avrete anche capito dove voglio andare a parare …
2.2 Usare un dizionario per inserire i nomi di tutte le pratiche di OmniFocus
Cercate in Workflow l’azione Dictionary e trascinatela all’inizio del vostro flusso di lavoro. Aggiungete un nuovo oggetto (Add a new item) premendo il tasto “+” di colore verde. Per ogni oggetto (item) del dizionario date dei nomi significativi alle chiavi (key) ma relativamente brevi. Come valore scegliete testo (text) ed inserite l’esatto testo del progetto in OmniFocus.
Per questo articolo ho creato in OmniFocus una cartella “Test Pratiche” all’interno della quale ho creato due progetti dal nome “pratica 1” e “pratica 2” ma voi molto probabilmente userete qualcosa di più complesso e significativo (immagino 😜).
Nell’immagine che segue vedete il semplice dizionario che ho creato a fini dimostrativi. Ovviamente se avete più di 2 pratiche l’elenco sarà più lungo.
L’azione successiva Choose from List (scegli da lista) vi permetterà di scegliere in quale pratica, dell’elenco pratiche inserito nel dizionario che avete appena creato, inserire il modello di OmniFocus.
Semplice vero?
2.2 Inserire la MagicVariable all’interno dell’azione Add TaskPaper to OmniFocus
Vediamo quindi come ultimare il flusso di lavoro.
Come vi ho fatto vedere nell’articolo precedente (punto 5.7) fate TAP all’interno del campo Project Name (Nome del Progetto) dell’azione Add TaskPaper to OmniFocus . Comparirà la tastiera ed a questo punto selezionate l’icona della MagicVariable.
Vi si presenterà una schermata simile a quella sottostante. Come potete vedere ho già personalizzato il nome della MagicVariable che viene generata dall’input dell’azione Choose from List. Se creaste per la prima volta questo Workflow il nome della variabile sarebbe “Choose from List”.
Selezionate comunque la variabile.
Vi dovreste trovare qualcosa di simile alla schermata che segue.
Premendo il tasto Rename (Rinomina) potrete dare un nome significativo alla Variabile, nei dati da estrarre scegliete as Dictionary (come un dizionario) e l’opzione Get Dictionary (Prendi dato del dizionario) e Get Value for Key None (Valore per la chiave nessuno).
Il risultato finale sarà simile quello dell’immagine sottostante.
2.3 Esempio pratico
Di seguito, attraverso una GIF animata, vedete il risultato finale del flusso di lavoro. Come potete vedere dal video il modello viene creato all’interno del progetto che io ho selezionato attraverso il flusso di lavoro.
3. Il problema dei termini che scadono in giorno festivo
Come anticipato nell’articolo precedente il flusso di lavoro di Workflow che ho creato aveva un grosso limite: non tiene conto dei termini che scadono di sabato o di domenica (i termini che scadono in un giorno festivo o nel periodo di sospensione feriale dei termini, problema che cercherò di risolvere in un futuro articolo).
Per chi non è avvocato specifico che in questi casi, per legge, il termine che scade di sabato o domenica viene prorogato al primo giorno non festivo successivo.
OmniFocus pur riuscendo a conteggiare i giorni (in più o in meno) non permette di inserire logiche condizionali (tipo SE è sabato o domenica fai questo …).
Workflow, tuttavia ci viene in soccorso.
4. Utilizzare le capacità di Workflow di manipolare le date per modificare i termini che scadono di sabato o di domenica
Il problema di gestire i sabati e le domeniche mi ha spronato ad approfondire queste funzioni. Tra le varie azioni di Workflow ne esistono alcune legate alla manipolazione delle date.
Ho, quindi, modificato il flusso di lavoro originale e fatto fare il conteggio dei giorni a Workflow attraverso l’azione Adjust Date (Regola la data – vedremo nel punto successivo come funziona in dettaglio). Ho impostato quest’azione per aggiungere alla data che si inserisce a mano 30 giorni.
La nuova data quindi viene salvata come variabile. Avendo il primo termine salvato in una Variabile di Workflow posso poi passare questo dato ad una serie di esami per verificare se il giorno indicato è un sabato o una domenica.
Il flusso di lavoro si ripete così per tutti i vari termini e, una volta fatto tutti i controlli, inserisce le tre variabili create (una per il primo, una per il secondo ed una per il terzo termine) all’interno del modello per OmniFocus formattato in TaskPaper.
Di seguito vedete parte del testo formattato in TaskPaper con le relative variabili.
Rispetto al primo modello, utilizzando le variabili per le date dei vari termini, ho fatto sottrarre ad OmniFocus i giorni dalla scadenza del termine per avere il preavviso necessario.
4.1 Le azioni di Workflow per manipolare le date: aggiungere giorni ed estrapolare il giorno della settimana da una data
Per questo flusso di lavoro ho utilizzato due azioni:
- Adjust Date: (Regolare la data) che permette di sommare, sottrarre porzioni di tempo ad una data e
- Format Date: (Modifica formato data) che permette di modificare il formato di visualizzazione di una data.
Nell’immagine che segue vedete le due azioni.
Le opzioni per formattare una data (Format Date) sono veramente tante in Workflow e se volete approfondire qui trovate la documentazione (in inglese).
Nel mio caso specifico ho utilizzato il formato Custom (personalizzato) e scelto la conversione della data nel giorno della settimana corrispondente: ovvero da 24/02/2018 l’azione di Workflow converte la data nel giorno di calendario corrispondente ovvero Sabato.
La Format String (stringa di formattazione) specifica è “EEEE”. Le 4 E indicano a Workflow di convertire la data nel nome completo del giorno (in inglese), se volessimo solo le prime 3 lettere del giorno avremmo dovuto usare la sigla “EEE”.
Le opzioni di Adjust Date: di seguito, infine, vedete le opzioni dell’azione per regolare la data. Non sto a tradurre dall’inglese tutte le opzioni perché sono relativamente semplici ed un po’ di sperimentazione vi permetterà di fare tutto.
4.2 Il blocco “if” per valutare se è sabato o domenica
Avuto finalmente il nome del giorno del termine è possibile verificare se cade di sabato o domenica con una condizione SE … ALLORA … ALTRIMENTI (if … then … otherwise). Vedete nell’immagine sottostante le azioni che ho strutturato per verificare la condizione.
Nella sostanza, SE il valore del giorno risultata essere uguale a Saturday (Sabato – Workflow ahimè restituisce il giorno della settimana in inglese) allora Workflow carica la variabile con la data del termine 183 n.1, vi aggiunge due giorni e salva questa nuova data all’interno della variabile originale, di fatto sostituendone il valore.
ALTRIMENTI esegue un ulteriore passaggio per verificare se il giorno è una domenica (Sunday), SE la condizione è avverata aggiunge un giorno alla data della scadenza del termine 183 n.1 altrimenti prosegue concludendo i due passaggi condizionale.
In gergo tecnico questo schema è una condizione IF nidificata, perché una condizione è annidata all’interno dell’altra.
Fatta questa operazione il ciclo che ho fin qui descritto viene ripetuto per il secondo e, infine, per il terzo termine. Vengono così generate le tre variabile che poi vengono inserite nel modello che vi ho fatto vedere al punto 4.
5. Creare delle routine con l’azione Run Workflow
Avrete notato che, per ogni termine, ho inserito una doppia condizione nidificata di istruzioni “if” per valutare se il termine calcolato cade di sabato e domenica. Sarebbe stato comodo richiamare l’insieme delle singole azioni e non doverle inserire manualmente una ad una per ogni conteggio. In Workflow allo stato non è possibile richiamare delle routine o sotto-programmi specializzati.
Workflow, come Automator, ha un flusso lineare delle azioni.
Recentemente è stato introdotto però un piccolo escamotage che, quando avrò un attimo di tempo, testerò.
Esiste un’azione Run Workflow (Esegui Flusso di lavoro) che permette di richiamare all’interno di un flusso di lavoro un altro flusso di lavoro precedentemente salvato.
Di seguito vedete l’azione e la possibilità di scegliere tra i miei flussi di lavoro salvati all’interno di Workflow.
Utilizzando questa azione potrei creare un separato flusso di lavoro il cui unico scopo è quello di controllare se una data cade di sabato, di domenica o in un festività e, in caso di risposta affermativa provveda a spostare in avanti il giorno restituendo quest’ultimo dato come risultato.
In questo modo potrei semplificare notevolmente il flusso di lavoro principale (quello di creazione del modello di OmniFocus) richiamando ogni volta che è necessario la routine di controllo. Ma questo è per un futuro articolo …
In conclusione
Qui potete scaricare il flusso di lavoro finale che ho creato.
Questa serie di articoli mi ha permesso di approfondire e testare molte opzioni di Workflow e, credo, dimostri come con un po’ di buona volontà sia possibile creare con degli strumenti da non programmatori delle automazioni (relativamente complesse) in iOS.
In futuro conto di testare altre modalità per aumentare la complessità di questo Workflow. In particolare voglio mettere mano ad una versione per Todoist. Tuttavia per Todoist le cose si fanno un po’ più complesse perché avrò necessità di interagire con le web API dell’applicazione.
Spero quindi che l’articolo vi spinga a sperimentare e, se volete, condividere, i vostri flussi di lavoro creati con Workflow. Conto nelle prossime settimane di scrivere nella newsletter di Avvocati e Mac una sorta di backstage sugli approcci che ho usato e come ho testato le varie azioni prima di comporre il flusso di lavoro definitivo.
Come sempre se avete domande, idee o suggerimenti potete lasciare un commento qui sotto o scrivermi una email.