Vi har nylig gått over hvordan du bruker to svært viktige komponenter i AppleScript: betingede utsagn og gjentagelsesløkker. Når kombinert, er kraften til disse to verktøyene utrolig kraftig. Nå skal vi bruke det vi har lært å bygge en enkel og praktisk arbeidsflyt som automatisk sender ut en liste over dine ufullstendige oppgaver fra påminnelsesprogrammet.
Det vi trenger er en enkel, enkel språkliste over trinn for å veilede oss.
Før vi begynner å skrive koden, er det viktig at vi finner ut hva det er som vi gjør. Vi har allerede en god ide om sluttresultatet som vi ønsker å oppnå, men det er ikke den mest effektive måten å oppnå det blindt på å møte det målet..
I stedet er det en grunnleggende algoritme som skal fungere som veibeskrivelse for hvordan vi legger ut koden vår. Det vi trenger er en enkel, enkel språkliste over trinn for å veilede oss.
Den vanskelige delen her er at vi trenger å bygge vår algoritme, mens vi husker hva vi vet om AppleScript's indre arbeid. Våre trinn vil ikke ha kode i dem, men de må være kodebevisste. Ellers vil vi ende opp med noe slikt:
Dette er uten tvil noe nyttig, men i sannhet kunne vi holde styr på den prosessen mentalt uten å stave ut en bestemt algoritme. Virkeligheten i situasjonen er at denne prosessen er mye mer kompleks og krever litt dypere innslag i hvordan vi skal utføre hvert brikke. Her er et mer grundig og nyttig forsøk på en algoritme:
Nå snakker vi. Dette er mye mer spesifikt og effektivt skisserer hvordan vår kode skal struktureres. Vårt første forsøk var villedende enkelt og virket som om det kunne gjøres i tre eller fire linjer med kode. Vårt andre forsøk representerer en mye mer realistisk titt på hvor mye arbeid som skal gå inn i dette skriptet.
Vår første kodende oppgave er å få AppleScript til å kommunisere med den nye Påminnelses-appen inne i Mountain Lion. Vi gjør selvfølgelig dette med en fortellingsblokk, akkurat som om vi kommuniserer med andre apper.
[Apple]
Fortell søknad "Påminnelser"
slutt tell
[/ Apple]
Vår fortellingsblokk inneholder alle kommandoene vi vil kaste på påminnelsesprogrammet. Enhver kode plassert mellom disse to linjene vil antas å være rettet mot denne spesifikke appen.
Todo-elementet øverst i algoritmen vår er å få alle påminnelsene i en spesifisert liste. Vi ønsker egentlig ikke alle dem samtidig. I stedet vil vi gripe en om gangen, test for å se om den samsvarer med kriteriene våre og fortsett deretter.
For å oppnå denne syklingseffekten kan vi bruke en repeteringssløyfe, som vi lærte alt om i en tidligere artikkel. Denne situasjonen krever en gjenta med løkke:
[Apple]
Fortell søknad "Påminnelser"
gjenta med jeg fra 1 til (telle av hver påminnelse om liste "Påminnelser")
slutt gjenta
slutt tell
[/ Apple]
Hva dette gjør er å etablere en blokk med kode som gjentar en gang for hver påminnelse i en liste med tittelen "Påminnelser". Du bør ha en av disse som standard i programmet Påminnelser.
Hver gang koden blokk kjører, variabelen Jeg vil øke til det er lik antall elementer i vår Påminnelsesliste.
Den neste tingen vi skal gjøre er å lage et helt rot av variabler. Noen av disse vil bli brukt med en gang, andre du ikke vil se til senere i skriptet vårt, det er bare en god ide å få dem ut av veien alt på en gang.
[Apple]
--Dato
sett Date til "Påminnelser for" & dato streng av (nåværende dato)
--tomme variabler
sett denEntry til ""
sett theList til
sett utgangen til ""
Fortell søknad "Påminnelser"
gjenta med jeg fra 1 til (telle av hver påminnelse om liste "Påminnelser")
--påminnelsesvariabler
sett theReminder til påminnelse jeg på listen "Påminnelser"
sett påminnelseNavn til navnet påReminderen
slutt gjenta
slutt tell
[/ Apple]
Den første variabelen tar tak i gjeldende dato. Vi gjør dette ved å referere til "datostrengen" for dagens dato. Dette tar følgende format: Fredag 1. februar 2012. I seg selv er "nåværende dato" mye større og inneholder både tid og dato.
Etter at vi har datoen, oppretter vi tre tomme variabler. Dette virker som en merkelig ting å gjøre, men det er logikk bak den. I utgangspunktet skal vi legge til og manipulere disse variablene inne i gjentakelsen vår og om blokker og vi trenger dem til å ha et grunnleggende eksistensnivå før vi kan gjøre det.
Til slutt, inne i gjentagelsesløkken, lager vi to variabler. theReminder er bare en snarvei, slik at vi ikke trenger å skrive ut "påminnelse Jeg av liste påminnelser "en rekke ganger. reminderName Tar navnet på hver påminnelse når vi sykler gjennom listen.
Problemet med vår nåværende struktur er det som sykler gjennom alle av påminnelsene dine, selv de som er ferdigstilt. Vi er ikke veldig interessert i dem, så vi må filtrere dem ut med en enkel betinget uttalelse. Dette går inn i repeteringsløkken rett etter påminnelsesvariablene fra forrige trinn.
[Apple]
--påminnelsesvariabler
sett theReminder til påminnelse jeg på listen "Påminnelser"
sett påminnelseNavn til navnet påReminderen
--er ferdig?
hvis theReminder ikke er ferdig da
slutt om
[/ Apple]
Som du kan se, er det så enkelt som en hvis setningen er rettet mot ikke fullført påminnelser. Nå vil enhver kode som vi kaster inne i dette bare utføres på de relevante påminnelsene.
Nå som vi har et betinget utsagn om å filtrere ut ikke-ferdige elementer, må vi finne en måte å fylle på listen med tittel og forfallsdato for hver ventende påminnelse. Den vanskelige delen er, påminnelsesprogrammet krever ikke en forfallsdato, noe som betyr at noen påminnelser vil ha dem, og andre vil ikke.
For å håndtere dette må vi sette opp to forskjellige scenarier. Først vil vi teste for å se om en forfallsdato eksisterer. Hvis det gjør det, setter vi inn inngangen til forfallsdato og påminnelsesnavn. Hvis en forfallsdato ikke eksisterer, hopper vi over forfallsdagen og legger bare til tittelen til inngangen. Til slutt legger vi til inngangen til listen. Igjen vil denne prosessen bli tatt på alle ikke-fullførte påminnelser, gradvis oppbygging listen slik at den inneholder all den informasjonen vi trenger.
[Apple]
--er ferdig?
hvis theReminder ikke er ferdig da
--har forfallsdato?
hvis forfallsdato forReminder eksisterer da
angitt på grunn av forfall til forfallstidspunktet
sett innEttry til påminnelseNavn og linefeed & dueDate
ellers
sett theEntry til påminnelseNavn
slutt om
sett theList til theList & theEntry
slutt om
[/ Apple]
Som du kan se, har vi nestet en betinget uttalelse innsiden av en annen. Vanligvis fjerner jeg dette når det er mulig for å holde ting enkelt og lesbart, men i dette tilfellet er et lag av hekking helt akseptabelt. Legg også merke til at jeg har plassert en linjeskift i mellom påminnelsesnavnet og forfallsdato, slik at de ikke vises på samme linje i vår endelige utgang.
Vi er ganske mye ferdig med påminnelsesblokken på Påminnelser. Deretter må vi ta all den teksten som ble lagt inn i listen og formater det pent for utdata til en e-post.
For å oppnå dette skjønt, må vi få en følelse av hvordan produktionen ser ut i sin nåværende tilstand. Når som helst du trenger å få et glimt av noen lagret verdi, prøv å bruke en returmelding. Her er all koden vi har skrevet så langt etterfulgt av en erklæring som returnerer innholdet i listen som en streng av tekst.
[Apple]
sett Date til "Påminnelser for" & dato streng av (nåværende dato)
sett denEntry til ""
sett theList til
sett utgangen til ""
Fortell søknad "Påminnelser"
gjenta med jeg fra 1 til (telle av hver påminnelse om liste "Påminnelser")
--sett variabler
sett theReminder til påminnelse jeg på listen "Påminnelser"
sett påminnelseNavn til navnet påReminderen
--er ferdig?
hvis theReminder ikke er ferdig da
--har forfallsdato?
hvis forfallsdato forReminder eksisterer da
angitt på grunn av forfall til forfallstidspunktet
sett innEttry til påminnelseNavn og linefeed & dueDate
ellers
sett theEntry til påminnelseNavn
slutt om
sett theList til theList & theEntry
slutt om
slutt gjenta
slutt tell
returner theList som streng
[/ Apple]
Hvis vi kjører dette, ser vi en gjeng med tekst som dukker opp i "Resultat" -delen av AppleScript Editor. Dette er teksten som er lagret i listen, men som du ser nedenfor, er det litt rotete!
Vi har definitivt fått noen problemer med linjebrudd. La oss rydde opp det skal vi? Det første du vil gjøre, er å fjerne det returnerte utsagnet. Det var bare et midlertidig knep for testformål og har ingen plass i vårt siste skript.
Deretter legger du inn delen av koden nedenfor i stedet for returoppgaven. Det vi gjør her sykler gjennom elementene i listen, legger til ekstra linefeeds etter hver og legger inn noen stiplede linjer for å gjøre alt ser pent ut.
[Apple]
gjenta med jeg fra 1 til (telle av hvert element i listen)
sett theOutput til (theOutput & item i ofList som streng) & linefeed & "---" & linefeed
slutt gjenta
[/ Apple]
Nå, hvis vi legger inn en annen midlertidig avkastningserklæring for å sjekke theoutput, Det vi ser er mye finere og enklere å lese. Legg merke til at vårt skript håndterer begge påminnelser med og uten forfallsdato, bare fint og skiller hver påminnelse med de punktene jeg nevnte før.
Vi er nesten ferdige! Nå som vi har en pent formatert liste over gjeldende påminnelser, trenger vi bare å få den informasjonen i en e-post og sende den av.
Det er her ting blir litt vanskelig. Scripting Mail er en ganske quirky oppgave, og du slags bare trenger å vite hvordan det fungerer for å få det til å vise alt riktig. AppleScript-ordboken vil hjelp, men ting er ikke så enkle som de er i andre apps, så føl deg ikke motløs hvis du blir forvirret.
Den grunnleggende prosessen er som følger. Først må du sette en variabel for å opprette en ny melding som du tilordner et sett med egenskaper (synlig, avsender, emne og innhold). Deretter starter du faktisk en fortellingsblokk på den variabelen (som er den nye utgående meldingen) og lage en ny mottaker. Da sender du selvfølgelig meldingen. Slik ser dette ut i praksis:
[Apple]
--Send e-post
Fortell søknad "Mail"
aktivere
sett theMessage for å lage ny utgående melding med egenskaper synlig: sann, avsender: "[email protected]", emne: theDate, content: theOutput
fortell theMessage
Gjør ny til mottaker med egenskaper adresse: "[email protected]"
sende
slutt tell
slutt tell
[/ Apple]
Legg merke til at vi har en avsender og en mottaker her. Du kan gjøre disse samme e-post hvis du vil sende meldingen til deg selv, eller kanskje du vil inkludere flere lagmedlemmer, slik at du kan bruke denne daglige e-posten for å holde alle på oppgaven. Det er opp til deg!
Vi har også et emne med datoen i den som bruker vår dato variabel fra før. Innholdet i meldingen er satt til theoutput så det vil se ut akkurat som det vi så i våre tester.
Skriptet vårt er nå ferdig. Bare for å være sikker på at du har alt, her er det fulle:
[Apple]
sett Date til "Påminnelser for" & dato streng av (nåværende dato)
sett denEntry til ""
sett theList til
sett utgangen til ""
Fortell søknad "Påminnelser"
gjenta med jeg fra 1 til (telle av hver påminnelse om liste "Påminnelser")
--sett variabler
sett theReminder til påminnelse jeg på listen "Påminnelser"
sett påminnelseNavn til navnet påReminderen
--er ferdig?
hvis theReminder ikke er ferdig da
--har forfallsdato?
hvis forfallsdato forReminder eksisterer da
angitt på grunn av forfall til forfallstidspunktet
sett innEttry til påminnelseNavn og linefeed & dueDate
ellers
sett theEntry til påminnelseNavn
slutt om
sett theList til theList & theEntry
slutt om
slutt gjenta
slutt tell
gjenta med jeg fra 1 til (telle av hvert element i listen)
sett theOutput til (theOutput & item i ofList som streng) & linefeed & "---" & linefeed
slutt gjenta
--Send e-post
Fortell søknad "Mail"
aktivere
sett theMessage for å lage ny utgående melding med egenskaper synlig: sann, avsender: "[email protected]", emne: theDate, content: theOutput
fortell theMessage
Gjør ny til mottaker med egenskaper adresse: "[email protected]"
sende
slutt tell
slutt tell
[/ Apple]
Nå som skriptet er helt funksjonelt, må vi finne ut en måte å planlegge den for å løpe regelmessig, si hver mandag morgen, så du kan se på uken din. For å gjøre dette må du lagre skriptet som et program, plassere det hvor som helst på harddisken, og åpne deretter kalenderprogrammet.
Herfra vil du sannsynligvis lage en ny kalender spesielt for automatiserte oppgaver (slik at de ikke vil rote opp de andre kalendere). Deretter oppretter du en ny begivenhet som gjentar hver mandag. Endelig opprett et varsel for hendelsen som åpner en fil og velg skriptprogrammet ditt.
Med dette på plass, hver mandag klokka 8, om jeg er på min datamaskin eller ikke, vil en epost bli sendt til meg som inneholder mine påminnelser for uken.
Hvis du fulgte trinnene hele veien til dette punktet, gratulerer, har du nettopp bygget et fantastisk lite skript som vil bidra til å holde deg produktiv i år. Nå er det på tide å ta det jeg har gjort og justere det slik at det passer dine behov. Hvordan kan du gjøre det bedre egnet for arbeidsflyten din?