Abbiamo recentemente esaminato come utilizzare due componenti molto importanti di AppleScript: istruzioni condizionali e loop ripetuti. Se combinati, la potenza di questi due strumenti è incredibilmente potente. Ora utilizzeremo ciò che abbiamo imparato per creare un flusso di lavoro semplice e pratico che invierà automaticamente via email un elenco delle attività incomplete dall'app Promemoria.
Ciò di cui abbiamo bisogno è un semplice elenco di passaggi linguistici per guidarci.
Prima di iniziare a digitare il nostro codice, è fondamentale capire che cosa stiamo facendo. Abbiamo già una buona idea del risultato finale che stiamo cercando di ottenere, ma il fatto di imbattersi ciecamente per raggiungere quell'obiettivo non è il modo più efficace per raggiungerlo.
Invece, quello che vogliamo fare è elaborare un algoritmo di base che fungerà da una road map per il modo in cui definiamo il nostro codice. Ciò di cui abbiamo bisogno è un semplice elenco di passaggi linguistici per guidarci.
La parte difficile è che abbiamo bisogno di costruire il nostro algoritmo tenendo a mente ciò che sappiamo sul funzionamento interno di AppleScript. I nostri passaggi non avranno codice in loro, ma devono essere consapevoli del codice. Altrimenti, finiremmo con qualcosa del genere:
Questo è discutibilmente piuttosto utile, ma in realtà potremmo tenere traccia di quel processo mentalmente senza mai specificare un algoritmo specifico. La realtà della situazione è che questo processo è molto più complesso e richiede una riflessione più approfondita su come realizzeremo ogni pezzo. Ecco un tentativo più completo e utile di un algoritmo:
Ora stiamo parlando. Questo è molto più specifico ed efficacemente delinea come il nostro codice sarà strutturato. Il nostro primo tentativo fu ingannevolmente semplice e sembrava che potesse essere fatto in tre o quattro righe di codice. Il nostro secondo tentativo rappresenta un aspetto molto più realistico di quanto lavoro ci sarà in questo script.
Il nostro primo compito di codifica è far sì che AppleScript comunichi con la nuova app Promemoria all'interno di Mountain Lion. Ovviamente lo facciamo con un blocco informatico, proprio come se stessimo comunicando con qualsiasi altra app.
[AppleScript]
dire all'applicazione "Promemoria"
fine raccontare
[/ AppleScript]
Il nostro tell block conterrà tutti i comandi che vogliamo lanciare nell'app Reminders. Si presume che qualsiasi codice inserito tra queste due linee sia diretto a questa specifica app.
L'elemento todo nella parte superiore del nostro algoritmo è quello di ottenere tutti i promemoria in un elenco specificato. In realtà non li vogliamo tutti contemporaneamente. Invece, vogliamo prenderne uno alla volta, testare per vedere se corrisponde ai nostri criteri e procedere di conseguenza.
Per realizzare questo effetto ciclico, possiamo usare un ciclo ripetuto, che abbiamo imparato in un articolo precedente. Questa circostanza richiede a ripetere con ciclo continuo:
[AppleScript]
dire all'applicazione "Promemoria"
ripeti con i da 1 a (il conteggio di ogni promemoria della lista "Promemoria")
fine ripetizione
fine raccontare
[/ AppleScript]
Quello che fa è stabilire un blocco di codice che verrà ripetuto una volta per ogni promemoria in un elenco intitolato "Promemoria". Dovresti averne uno di default nell'app Promemoria.
Ogni volta che viene eseguito il blocco di codice, la variabile io aumenterà finché non sarà uguale al numero di elementi nel nostro elenco Promemoria.
La prossima cosa che faremo è creare un intero casino di variabili. Alcuni di questi verranno usati subito, altri non li vedrai più avanti nel nostro script, è solo una buona idea toglierli tutti contemporaneamente.
[AppleScript]
--Data
impostare la data su "Promemoria per" e la stringa data di (data corrente)
--variabili vuote
imposta theEntry su ""
imposta la lista su
imposta theOutput su ""
dire all'applicazione "Promemoria"
ripeti con i da 1 a (il conteggio di ogni promemoria della lista "Promemoria")
--variabili promemoria
imposta theReminder per ricordare i della lista "Promemoria"
set reminderName al nome di theReminder
fine ripetizione
fine raccontare
[/ AppleScript]
La prima variabile acquisisce la data corrente. Facciamo questo facendo riferimento alla "stringa di data" della data corrente. Questo prende il seguente formato: Venerdì 1 febbraio 2012. Di per sé, "la data corrente" è molto più grande e contiene sia il tempo che la data.
Dopo aver ottenuto la data, creiamo tre variabili vuote. Sembra una cosa strana da fare, ma dietro c'è una logica. Fondamentalmente, aggiungeremo e manipoleremo queste variabili all'interno dei nostri blocchi ripetuti e se e avremo bisogno che abbiano un livello base di esistenza prima di poterlo fare.
Infine, all'interno del nostro ciclo di ripetizione, creiamo altre due variabili. theReminder è semplicemente una scorciatoia per non dover digitare "promemoria" io della lista Promemoria "un sacco di volte. reminderName afferra il nome di ogni promemoria mentre navighiamo attraverso la lista.
Il problema con la nostra struttura attuale è che passa attraverso tutti dei tuoi ricordi, anche quelli che sono stati completati. Non siamo davvero interessati a questi, quindi dobbiamo filtrarli con una semplice dichiarazione condizionale. Questo va all'interno del ciclo di ripetizioni subito dopo le variabili del promemoria del passaggio precedente.
[AppleScript]
--variabili promemoria
imposta theReminder per ricordare i della lista "Promemoria"
set reminderName al nome di theReminder
--è completo?
se theReminder non è completato allora
finisci se
[/ AppleScript]
Come puoi vedere, è semplice come una frase se l'obiettivo è quello non completato promemoria. Ora qualsiasi codice che gettiamo all'interno di questo verrà eseguito solo sui relativi promemoria.
Ora che abbiamo una dichiarazione condizionale per filtrare gli elementi non completati, abbiamo bisogno di trovare un modo per riempire la lista con il titolo e la data di scadenza di ciascun promemoria in sospeso. La parte più difficile è che l'app Promemoria non richiede una data di scadenza, il che significa che alcuni promemoria li avranno e altri no.
Per gestire questo abbiamo bisogno di impostare due diversi scenari. Per prima cosa testeremo per vedere se esiste una data di scadenza. Se lo fa, imposteremo l'entrata alla data di scadenza e il nome del promemoria. Se una data di scadenza non esiste, salteremo la data di scadenza e aggiungeremo il titolo a l'entrata. Infine, aggiungeremo l'entrata a la lista. Ancora una volta, questo processo sarà preso su tutti i promemoria non completati, gradualmente crescendo la lista in modo che contenga tutte le informazioni di cui abbiamo bisogno.
[AppleScript]
--è completo?
se theReminder non è completato allora
--ha una data di scadenza?
se la data di scadenza di theReminder esiste allora
impostare la data di scadenza delReminder
imposta la voce su promemoria Nome e avanzamento riga e scadenza
altro
imposta l'indirizzo su promemoria nome
finisci se
imposta la lista su theList & theEntry
finisci se
[/ AppleScript]
Come puoi vedere, abbiamo annidato una dichiarazione condizionale all'interno di un'altra. In generale, evito questo quando possibile per mantenere le cose semplici e leggibili, ma in questo caso, uno strato di annidamento è perfettamente accettabile. Si noti inoltre che ho inserito un avanzamento riga tra il nome del promemoria e la data di scadenza in modo che non appaiano sulla stessa riga nel nostro output finale.
Abbiamo praticamente finito con l'app Promemoria. Successivamente, dobbiamo prendere tutto il testo in cui è stato inserito la lista e formattarlo bene per l'output in una e-mail.
Per riuscirci, però, dobbiamo avere un'idea di come il nostro output appare nel suo stato attuale. Ogni volta che hai bisogno di dare un'occhiata a qualche valore memorizzato, prova a usare una dichiarazione di ritorno. Ecco tutto il codice che abbiamo scritto finora seguito da una dichiarazione che restituisce il contenuto di la lista come una stringa di testo.
[AppleScript]
impostare la data su "Promemoria per" e la stringa data di (data corrente)
imposta theEntry su ""
imposta la lista su
imposta theOutput su ""
dire all'applicazione "Promemoria"
ripeti con i da 1 a (il conteggio di ogni promemoria della lista "Promemoria")
--imposta variabili
imposta theReminder per ricordare i della lista "Promemoria"
set reminderName al nome di theReminder
--è completo?
se theReminder non è completato allora
--ha una data di scadenza?
se la data di scadenza di theReminder esiste allora
impostare la data di scadenza delReminder
imposta la voce su promemoria Nome e avanzamento riga e scadenza
altro
imposta l'indirizzo su promemoria nome
finisci se
imposta la lista su theList & theEntry
finisci se
fine ripetizione
fine raccontare
restituire l'elenco come stringa
[/ AppleScript]
Se lo eseguiamo, vedremo un po 'di testo apparire nella sezione "Risultato" di AppleScript Editor. Questo è il testo in cui è memorizzato la lista, ma come puoi vedere qui sotto, è un po 'disordinato!
Abbiamo sicuramente avuto alcuni problemi di interruzione di linea. Puliamo tutto questo? La prima cosa che vorrai fare è rimuovere la dichiarazione di reso. Era solo un trucco temporaneo a scopo di test e non ha posto nel nostro script finale.
Quindi, inserire il blocco di codice qui sotto al posto dell'istruzione return. Quello che stiamo facendo qui è il ciclismo attraverso gli elementi in la lista, aggiungendo ulteriori linefeed e inserendo alcune linee tratteggiate per rendere tutto più bello.
[AppleScript]
ripeti con i da 1 a (il conteggio di ogni elemento della lista)
imposta l'output su (l'output e l'elemento i dell'elenco come stringa) e l'avanzamento riga & "---" e l'avanzamento riga
fine ripetizione
[/ AppleScript]
Ora se aggiungiamo un'altra dichiarazione di ritorno temporanea da verificare L'output, quello che vediamo è molto più carino e facile da leggere. Si noti che il nostro script sta gestendo entrambi i promemoria con e senza scadenze giuste e separa ogni promemoria con quei trattini che ho citato prima.
Abbiamo quasi finito! Ora che abbiamo un elenco ben formattato dei promemoria attuali, dobbiamo solo ottenere queste informazioni in una e-mail e inviarla via.
Questo è dove le cose diventano un po 'complicate. Scripting Mail è un compito piuttosto bizzarro e devi solo sapere come funziona per far sì che tutto funzioni correttamente. Il dizionario AppleScript volontà aiuto, ma le cose non sono così semplici come in altre app quindi non sentirti scoraggiato se ti confondi.
Il processo di base è il seguente. Innanzitutto, è necessario impostare una variabile per creare un nuovo messaggio per il quale si assegna un set di proprietà (visibile, mittente, oggetto e contenuto). Quindi, si avvia effettivamente un tell blocco sopra quella variabile (che è il nuovo messaggio in uscita) e crea un nuovo destinatario. Quindi tu ovviamente invii il messaggio. Ecco come appare in pratica:
[AppleScript]
--Invia una email
dire all'applicazione "Mail"
attivare
impostaMessaggio per creare un nuovo messaggio in uscita con proprietà visible: true, mittente: "[email protected]", oggetto: theDate, content: theOutput
dillo al messaggio
rendere nuovo al destinatario con proprietà indirizzo: "[email protected]"
inviare
fine raccontare
fine raccontare
[/ AppleScript]
Si noti che abbiamo un mittente e un destinatario qui. È possibile creare la stessa e-mail se si desidera inviare il messaggio a se stessi, o forse si desidera includere diversi membri del team in modo che sia possibile utilizzare questa e-mail giornaliera per mantenere tutti in attività. Tocca a voi!
Abbiamo anche un argomento con la data che utilizza il nostro l'appuntamento variabile da prima. Il contenuto del messaggio è impostato su L'output quindi assomiglierà a quello che abbiamo visto nei nostri test.
Il nostro script è ora finito. Per essere sicuro di aver capito tutto, ecco la cosa completa:
[AppleScript]
impostare la data su "Promemoria per" e la stringa data di (data corrente)
imposta theEntry su ""
imposta la lista su
imposta theOutput su ""
dire all'applicazione "Promemoria"
ripeti con i da 1 a (il conteggio di ogni promemoria della lista "Promemoria")
--imposta variabili
imposta theReminder per ricordare i della lista "Promemoria"
set reminderName al nome di theReminder
--è completo?
se theReminder non è completato allora
--ha una data di scadenza?
se la data di scadenza di theReminder esiste allora
impostare la data di scadenza delReminder
imposta la voce su promemoria Nome e avanzamento riga e scadenza
altro
imposta l'indirizzo su promemoria nome
finisci se
imposta la lista su theList & theEntry
finisci se
fine ripetizione
fine raccontare
ripeti con i da 1 a (il conteggio di ogni elemento della lista)
imposta l'output su (l'output e l'elemento i dell'elenco come stringa) e l'avanzamento riga & "---" e l'avanzamento riga
fine ripetizione
--Invia una email
dire all'applicazione "Mail"
attivare
impostaMessaggio per creare un nuovo messaggio in uscita con proprietà visible: true, mittente: "[email protected]", oggetto: theDate, content: theOutput
dillo al messaggio
rendere nuovo al destinatario con proprietà indirizzo: "[email protected]"
inviare
fine raccontare
fine raccontare
[/ AppleScript]
Ora che la sceneggiatura è perfettamente funzionante, dobbiamo trovare un modo per programmarlo per funzionare regolarmente, diciamo ogni lunedì mattina in modo da poter dare un'occhiata alla tua settimana. Per fare ciò, salva lo script come applicazione, posizionalo ovunque nel disco rigido, quindi apri l'app Calendario.
Da qui, probabilmente vorrai creare un nuovo calendario specifico per le attività automatizzate (in modo che non ingombrino gli altri tuoi calendari). Quindi crea un nuovo evento che si ripete ogni lunedì. Infine, crea un avviso per l'evento che apre un file e scegli la tua applicazione di script.
Con questo in atto, ogni lunedì alle 8:00, sia che sia sul mio computer o no, mi verrà inviata un'e-mail contenente i miei Promemoria per la settimana.
Se hai seguito i passaggi fino a questo punto, congratulazioni, hai appena realizzato un fantastico script che ti aiuterà a rimanere produttivo quest'anno. Ora è il momento di prendere ciò che ho fatto e di adattarlo alle proprie esigenze. Come puoi renderlo più adatto al tuo flusso di lavoro?