Am trecut recent cum să folosim două componente foarte importante ale AppleScript: afirmații condiționale și bucle repetitive. Când se combină, puterea acestor două instrumente este incredibil de puternică. Acum vom folosi ceea ce am învățat pentru a construi un flux de lucru simplu și practic, care va trimite în mod automat o listă a sarcinilor dvs. incomplete din aplicația Mementouri.
Avem nevoie de o listă simplă și clară de pași pentru a ne îndruma.
Înainte de a începe să introducem codul nostru, este esențial să ne dăm seama ce facem noi. Avem deja o idee bună despre rezultatul final pe care îl căutăm să-l realizăm, dar orbirea pentru a îndeplini acest obiectiv nu este cea mai eficientă modalitate de realizare a acestuia.
În schimb, ceea ce vrem să facem este să elaborăm un algoritm de bază care va servi ca o foaie de parcurs pentru modul în care ne vom expune codul. Avem nevoie de o listă simplă și clară de pași pentru a ne îndruma.
Partea dificilă aici este că trebuie să construim algoritmul, ținând cont totodată de ceea ce știm despre funcționarea interioară a AppleScript. Pașii noștri nu vor avea cod în ele, dar trebuie să fie conștienți de cod. În caz contrar, vom ajunge la așa ceva:
Acest lucru este, fără îndoială oarecum util, dar, în adevăr, am putea să urmărim acest proces mental fără a explica vreodată un algoritm specific. Realitatea situației este că acest proces este mult mai complex și necesită o gândire mai profundă în modul în care vom realiza fiecare piesă. Iată o încercare mai aprofundată și utilă a unui algoritm:
Acum noi vorbim. Acest lucru este mult mai specific și mai eficient evidențiază modul în care codul nostru va fi structurat. Prima noastră încercare a fost înșelătoare și părea că se poate face în trei sau patru rânduri de cod. Cea de-a doua încercare reprezintă o privire mult mai realistă cu privire la numărul de lucrări care vor merge în acest scenariu.
Prima noastră sarcină de codificare este să oblige AppleScript să comunice cu noua aplicație de mementouri din cadrul Mountain Lion. Desigur, facem asta cu un blocaj, ca și cum am comunica cu orice altă aplicație.
[AppleScript]
spuneți aplicația "Mementouri"
sfarsitul spune
[/ AppleScript]
Blocul nostru de anunțuri va conține toate comenzile pe care vrem să le aruncăm la aplicația Remitențe. Orice cod plasat între aceste două linii se presupune că este direcționat către această aplicație specifică.
Elementul todo din partea de sus a algoritmului nostru este de a obține toate mementourile dintr-o listă specificată. Nu vrem de fapt toti toti deodata. În schimb, vrem să luăm una câte una, să verificăm dacă respectă criteriile noastre și să procedăm corespunzător.
Pentru a realiza acest efect de ciclism, putem folosi o buclă repetată, despre care am învățat totul într-un articol anterior. Această circumstanță necesită a repetați cu buclă:
[AppleScript]
spuneți aplicația "Mementouri"
repetați cu i de la 1 la (numărul fiecărei mementouri din lista "Mementouri")
repetați sfârșitul
sfarsitul spune
[/ AppleScript]
Ceea ce face acest lucru este să stabilească un bloc de cod care se va repeta o dată pentru fiecare memento într-o listă intitulată "Mementouri". Ar trebui să aveți una dintre acestea în mod prestabilit în aplicația Mementouri.
De fiecare dată când rulează blocul de cod, variabila eu va crește până când va fi egal cu numărul de elemente din lista noastră de mementouri.
Următorul lucru pe care îl vom face este să creăm o mulțime de variabile. Unele dintre acestea vor fi folosite imediat, altele pe care nu le veți vedea până mai târziu în scenariul nostru, este doar o idee bună să le scoateți din drumul tuturor dintr-o dată.
[AppleScript]
--Data
setațiData la "Memento pentru" și șir de date din (data curentă)
--variabile goale
setați intrarea la ""
setațiListul la
setațiOutput la ""
spuneți aplicația "Mementouri"
repetați cu i de la 1 la (numărul fiecărei mementouri din lista "Mementouri")
--memento-uri variabile
setațiReminder pentru a vă reaminti din lista "Mementouri"
setați reminderName la numele Reminderului
repetați sfârșitul
sfarsitul spune
[/ AppleScript]
Prima variabilă captează data curentă. Facem acest lucru referindu-ne la "șirul de date" al datei curente. Aceasta are următorul format: Vineri, 1 februarie 2012. Prin ea însăși, "data curentă" este mult mai mare și conține atât timpul, cât și data.
După ce avem data, vom crea trei variabile goale. Acest lucru pare a fi un lucru ciudat, dar există o logică în spatele acestuia. Practic, vom adăuga și manipula aceste variabile în interiorul repetării noastre și dacă blocuri și avem nevoie de ele pentru a avea un nivel de bază de existență înainte de a putea face acest lucru.
În cele din urmă, în interiorul bucla noastră repetată, creăm alte două variabile. theReminder este pur și simplu o comandă rapidă, astfel încât nu trebuie să tipăm "memento" eu din lista Memento-uri "o grămadă de ori. reminderName apucă numele fiecărui memento pe măsură ce navigăm prin listă.
Problema cu structura noastră actuală este cea care trece prin cicluri toate din amintirile dvs., chiar și cele care au fost finalizate. Nu ne interesează cu adevărat aceștia, așa că trebuie să le eliminăm printr-o simplă declarație condiționată. Aceasta intră în interiorul bucla de repetare imediat după variabilele de memento de la pasul anterior.
[AppleScript]
--memento-uri variabile
setațiReminder pentru a vă reaminti din lista "Mementouri"
setați reminderName la numele Reminderului
--este complet?
dacăReminderul nu este completat atunci
sfârșit dacă
[/ AppleScript]
După cum puteți vedea, este la fel de simplu ca și o afirmație care vizează incomplet memento-uri. Acum, orice cod pe care îl aruncăm în interiorul acestui lucru se va executa numai pe memento-urile relevante.
Acum că avem o afirmație condiționată pentru a filtra elemente neterminate, trebuie să găsim o modalitate de completare lista cu titlul și data scadenței fiecărui memento în așteptare. Partea dificilă este că aplicația memento-uri nu are nevoie de o dată scadentă, ceea ce înseamnă că niște mementouri le vor avea, iar alții nu vor.
Pentru a rezolva acest lucru trebuie să stabilim două scenarii diferite. În primul rând, vom testa pentru a vedea dacă există o dată scadentă. Dacă da, vom stabili intrarea până la data scadenței și numele mementoului. Dacă nu există o dată scadentă, vom trece peste data scadenței și vom adăuga doar titlul intrarea. În cele din urmă, vom adăuga intrarea la lista. Din nou, acest proces va fi luat pe toate memento-urile nefinalizate, construindu-se treptat lista astfel încât să conțină toate informațiile de care avem nevoie.
[AppleScript]
--este complet?
dacăReminderul nu este completat atunci
--are data scadentă?
dacă data scadenței există atunci
setatData la data scadenta aReminder
setați meniul ReminderName & linefeed & dueDate
altfel
setați-l pe ReminderName
sfârșit dacă
setațiListul laList & TheEntry
sfârșit dacă
[/ AppleScript]
După cum puteți vedea, am introdus o declarație condiționată în interiorul alteia. În general, mă îndrept spre acest lucru atunci când este posibil pentru a păstra lucrurile simple și lizibile, dar în acest caz, un strat de cuibărit este perfect acceptabil. De asemenea, rețineți că am plasat a linie de alimentare între numele de memento și data scadenței, astfel încât acestea să nu apară pe aceeași linie în rezultatul nostru final.
Aproape că suntem terminați cu blocul de anunțuri pentru anunțurile pentru mementouri. Apoi, trebuie să luăm tot textul în care a fost plasat lista și formatați-l frumos pentru a vă trimite într-un e-mail.
Pentru a realiza acest lucru, totuși, trebuie să ne simțim pentru modul în care rezultatele noastre arată în starea sa actuală. Ori de câte ori trebuie să obțineți o anumită valoare stocată, încercați să utilizați o declarație de returnare. Iată tot codul pe care l-am scris până acum, urmat de o declarație care returnează conținutul lista ca un șir de text.
[AppleScript]
setațiData la "Memento pentru" și șir de date din (data curentă)
setați intrarea la ""
setațiListul la
setațiOutput la ""
spuneți aplicația "Mementouri"
repetați cu i de la 1 la (numărul fiecărei mementouri din lista "Mementouri")
--setați variabilele
setațiReminder pentru a vă reaminti din lista "Mementouri"
setați reminderName la numele Reminderului
--este complet?
dacăReminderul nu este completat atunci
--are data scadentă?
dacă data scadenței există atunci
setatData la data scadenta aReminder
setați meniul ReminderName & linefeed & dueDate
altfel
setați-l pe ReminderName
sfârșit dacă
setațiListul laList & TheEntry
sfârșit dacă
repetați sfârșitul
sfarsitul spune
returnațiListul ca șir
[/ AppleScript]
Dacă executăm acest lucru, vom vedea o grămadă de text pop-up în secțiunea "Rezultat" a AppleScript Editor. Acesta este textul în care sunt stocate lista, dar după cum puteți vedea mai jos, este un pic dezordonat!
Am avut cu siguranță niște probleme legate de linii. Să ne curățăm asta? Primul lucru pe care doriți să îl faceți este să eliminați declarația de returnare. A fost doar un truc provizoriu în scopuri de testare și nu are niciun loc în scenariul nostru final.
Apoi, introduceți bucata de cod de mai jos, în loc de declarația de returnare. Ceea ce facem aici este ciclismul prin intermediul elementelor din lista, adăugând linii suplimentare după fiecare și inserând câteva linii punctate pentru a face totul să arate destul.
[AppleScript]
repetați cu i de la 1 la (numărul fiecărui element al listei)
setațiOutput la (ieșirea și elementul i al listei ca șir) & linefeed & "---" & linefeed
repetați sfârșitul
[/ AppleScript]
Acum, dacă adăugăm o altă declarație temporară de returnare pentru a verifica theOutput, ceea ce vedem este mult mai frumos și mai ușor de citit. Observați că scriptul nostru gestionează ambele mementouri cu și fără termene limită foarte bine și separă fiecare memento cu acele liniuțe pe care le-am menționat anterior.
Aproape am terminat! Acum, că avem o listă bine formatată a mementourilor curente, trebuie doar să obținem acele informații într-un e-mail și să le trimitem.
Aici lucrurile devin puțin complicate. Scripting Mail este o sarcină destul de ciudat și trebuie doar să știți cum funcționează pentru a face totul să iasă bine. Dicționarul AppleScript voi ajutor, dar lucrurile nu sunt la fel de simple ca și în alte aplicații, așa că nu te simți descurajat dacă te confuzi.
Procesul de bază este după cum urmează. Mai întâi, trebuie să setați o variabilă pentru a crea un mesaj nou pentru care atribuiți un set de proprietăți (vizibil, expeditor, subiect și conținut). Apoi, inițiați un blocaj pe acea variabilă (care este noul mesaj de ieșire) și a face un destinatar nou. Apoi, desigur, trimiteți mesajul. Iată cum arată acest lucru în practică:
[AppleScript]
--Trimite email
spuneți aplicația "Mail"
Activati
setațiMessage pentru a crea un nou mesaj de ieșire cu proprietăți visible: true, sender: "[email protected]", subiectul: data, conținutul: theOutput
spuneți mesajul
faceți noul destinatar cu proprietăți address: "[email protected]"
trimite
sfarsitul spune
sfarsitul spune
[/ AppleScript]
Observați că avem un expeditor și un destinatar aici. Poți să-i faci aceleași e-mailuri dacă vrei să-ți trimiți mesajul sau poate vrei să includeți mai mulți membri ai echipei, astfel încât să poți folosi acest e-mail zilnic pentru a ține pe toată lumea sarcina. Depinde de tine!
Avem, de asemenea, un subiect cu data în care ne folosim data variabilă înainte. Conținutul mesajului este setat la theOutput așa că va arăta exact așa cum am văzut în testele noastre.
Scenariul nostru este acum terminat. Doar pentru a fi siguri că ați reușit toate acestea, iată totul:
[AppleScript]
setațiData la "Memento pentru" și șir de date din (data curentă)
setați intrarea la ""
setațiListul la
setațiOutput la ""
spuneți aplicația "Mementouri"
repetați cu i de la 1 la (numărul fiecărei mementouri din lista "Mementouri")
--setați variabilele
setațiReminder pentru a vă reaminti din lista "Mementouri"
setați reminderName la numele Reminderului
--este complet?
dacăReminderul nu este completat atunci
--are data scadentă?
dacă data scadenței există atunci
setatData la data scadenta aReminder
setați meniul ReminderName & linefeed & dueDate
altfel
setați-l pe ReminderName
sfârșit dacă
setațiListul laList & TheEntry
sfârșit dacă
repetați sfârșitul
sfarsitul spune
repetați cu i de la 1 la (numărul fiecărui element al listei)
setațiOutput la (ieșirea și elementul i al listei ca șir) & linefeed & "---" & linefeed
repetați sfârșitul
--Trimite email
spuneți aplicația "Mail"
Activati
setațiMessage pentru a crea un nou mesaj de ieșire cu proprietăți visible: true, sender: "[email protected]", subiectul: data, conținutul: theOutput
spuneți mesajul
faceți noul destinatar cu proprietăți address: "[email protected]"
trimite
sfarsitul spune
sfarsitul spune
[/ AppleScript]
Acum că scenariul este perfect funcțional, trebuie să găsim o modalitate de a programa să ruleze regulat, să zicem în fiecare dimineață în dimineața zilei, ca să puteți să vă uitați la săptămâna dvs. Pentru a face acest lucru, salvați scriptul ca aplicație, plasați-l oriunde doriți pe hard disk, apoi deschideți aplicația Calendar.
De aici, probabil că veți dori să creați un nou calendar special pentru sarcini automate (astfel încât să nu se aglomereze celelalte calendare). Apoi creați un nou eveniment care se repetă în fiecare luni. În cele din urmă, creați o alertă pentru evenimentul care deschide un fișier și alege aplicația de script.
Cu acest lucru în loc, în fiecare luni de la ora 8, fie că sunt la computerul meu sau nu, un e-mail va fi trimis la mine conținând memento-uri mele pentru săptămâna.
Dacă ați urmat pașii până la acest punct, felicitări, tocmai ați construit un scenariu minunat care vă va ajuta să vă păstrați productiv în acest an. Acum este timpul să luați ceea ce am făcut și să-l optimizați pentru a vă satisface nevoile. Cum îl puteți face mai potrivit pentru fluxul de lucru?