- Taz_1999
- Medlem ●
- Stockholm
- 2003-07-04 02:38
Hejsan!
Om ni vill lära er lite Applescript och använder Microsoft Entourage som epostprogram och märker att ni skickar mail flera gånger om dagen till ett fåtal personer, så kanske ni är intresserade av att läsa nedanstående.
Det är en beskrivning över hur man skapar ett Applescript som skapar ett nytt mail i Entourage i Office X adresserat till en viss person med ett visst avsändarkonto, signatur, inledning av mailet och ärenderad.
Det riktigt fiffiga är att man kan aktivera detta script på flera olika sätt, bland annat genom att trycka CTRL + den bokstav man bestämt sig för genom att spara scriptet på rätt plats och med rätt namn. Mycket smidigt.
Bakgrund
Jag som skickar mail till samma person mellan 5 och 25 gånger per dag (min affärspartner på annan ort) tycker att det är för många steg att:
* Starta Entourage
* Öppna ett nytt epostmeddelande via kommando + N
* Skriva de fyra första bokstäverna i namnet
* Välja rätt person med piltangenterna
* Trycka tab fyra gånger
* Fylla i ett ärende
* Skriva "Hejsan!"
* Trycka ny rad två gånger
...innan jag kan skriva resten av meddelandet. Jag kan åstadkomma allt detta genom att trycka ett snabbkommando, (tex CTRL+S) med hjälp av Applescript.
Att starta ett script
Jag kan spara detta script på flera ställen för att göra det lätt att starta det. Jag kan spara det som en liten programvara i Applications/Program-mappen, jag kan lägga det i dockan, jag kan ha ett alias på skrivbordet, jag kan lägga ett alias i en Script-meny som finns brevid klockan längst upp till höger på skärmen och jag kan ha det i en scriptmeny inuti Entourage, där det reagerar på snabbkommandon.
Kommentarer i Applescript
Man skall kommentera sina script, i Applescript kan du skriva kommenterar på två sätt.
Om du skriver -- i en rad eller i början av den, så kommer allt efter -- att hoppas över av Applescript fram till att nästa rad börjar. Så en kort kommentar på en rad skriver man alltså med --
set Account_Name to "Intelligent Mammals.se" -- Kontonamnet i Entourage
Vill du skriva en kommentar på flera rader skriver du en inledande (* och en avslutande *). Allt mellan (* och *) är kommentar och hoppas över av Applescript.
(*
Nu skapar vi ett nytt meddelande med de variabler vi
satte längre upp i scriptet.
*)
ScriptEditor
I Mac OS X heter programmet för att skapa Applescript Script Editor och finns i mappen Applications/Program.
Starta det programmet och börja skriva (eller kopiera det färdiga manuset längst ner).
Passa också på att klicka på programmets ikon i dockan med CTRL-tangenten intryckt och välj "Behåll i dock".
Scriptets uppbyggnad - SET
Vi börjar med att skapa lite variabler. Det är ganska snyggt om man anger sina variabler i början av scriptet, då blir det lättare att ändra sådant som skall vara likadant i hela scriptet eller om man vill göra om scriptet för att skicka epost till en ny person. Här är de Applescript-kommandon som skapar våra variabler.
[I]set Account_Name to "Intelligent Mammals.se" -- Kontonamnet i Entourage
set To_Email to "[email protected]"
set To_Name to "Ola Andersson"
(*
Notera placeringen av citat-tecknet två rader längre ner, det är för att
få två blankrader i meddelandet. Man kan skriva \r om man vill också.
*)
set email_subject to "XXXX"
set email_message to "Hejsan Ola!
"[I]
Scriptets uppbyggnad - TELL
I Applescript så skriver man Tell för att ange vilket program man vill rikta ett kommando till. Activate förstår alla program och det betyder att om de inte är igång så skall de starta, så när vi börjar skriva scriptet så börjar vi med detta:
tell application "Microsoft Entourage"
activate
end tell
Detta får Microsoft Entourage att starta.
Om du råkar stava fel på namnet på din programvara, dvs anger ett namn på en applikation som inte finns, så kommer Manusredigeraren att fråga dig var applikationen ligger. Du pekar då på den och sedan ändrar Manusredigeraren i manuset så att det står rätt.
Scriptets uppbyggnad - MAKE
De flesta program förstår ordet make och det brukar vara det man skriver för att skapa ett nytt dokument i programmet. Det som skiljer sig åt är vad man skriver efteråt för vissa program kan nämligen skapa flera olika sorters objekt. Entourage kan tex skapa både epostmeddelanden, kontakter, evenemang och anteckningar. Claris Works, för att ta ett annat exempel, kan skapa flera olika typer av dokument. Programmet Finder kan skapa både mappar, filer och alias.
Så här står det i ordlistan för Microsoft Entourage
make
new type class -- the class of the new element.
at anything -- the location at which to insert the element
[with data anything] -- the initial data for the element
[with properties record] -- the initial values for
-- the properties of the element
Result: reference -- to the new object(s)
Ordlistan för Microsoft Entourage?
För att ta reda på vad man kan skapa i ett program så använder man sig av ordlistan för programmet. Enklaste sättet att öppna ordlistan för ett visst program som man har i dockan är att klicka på ikonen av programmet i dockan när man har kommando-tangenten intryckt. Då kommer en mapp att öppnas, den innehåller programikonen för det programmet. Den ikonen drar du och släpper på ikonen för Script Editor (som du väl också har i dockan) och vips öppnas ordlistan för det programmet. Ordlistan är alltså en lista över kommandon och parametrar som kan sättas av Applescript i ett visst program.
Ordlistan är inte så bra för nybörjare, men när du är mer varm i kläderna med Applescript så är det lättare att förstå den och se vad man skall leta efter.
Skapa nytt fönster
Vårt kommando för att skapa ett epostmeddelande skriver vi efter activate, så här:
tell application "Microsoft Entourage"
activate
make new draft window with properties {account:POP account Account_Name,
subject:email_subject, content:email_message, recipient:{{address:{display
name:To_Name, address:To_Email}, recipient type:to recipient, delivery
status:unsent}}}
Jag kunde valt att skapa ett meddelande i Ut-korgen, klart att skickas med:
make new outgoing message at the out box folder with properties {account:POP
account Account_Name, subject:email_subject, content:email_message,
recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to
recipient, delivery status:unsent}}}
... men eftersom jag ju vill skriva meddelandet själv så är det bättre med "make new draft window" som öppnar ett nytt fönster istället.
Nu skall jag förklara ovanstående:
{} - Listor
I Applescript så kan man skapa en lista av saker genom att tilldela en variabel ett antal objekt i en lista:
set pannkaksrecept to {"mjöl", "mjölk", "ägg", "salt", "smör"}
pannkaksrecept är alltså namnet på variabeln och det mellan måsvingarna är sakerna i listan.
En annan sak som Applescript håller reda på är data-typer, du har tex text, nummer, datum och alias som separata datatyper bland annat. Det är viktigt att hålla reda på datatypen man använder sig av då de flesta kommandon förväntar sig data av en viss typ och de flesta funktioner lämnar ifrån sig data av en viss typ. Ibland är det nödvändigt att konvertera en typ av data till en annan, men mer om det en annan gång.
En lista är också en datatyp, men varje sak i en lista kan ha sin egen datatyp. Jag kan alltså i samma lista lagra både texter, nummer och även andra listor. Ibland förväntar sig ett kommando en lista på sk "properties" som är ett antal parametrar som ett objekt skall ha.
Ett nytt meddelande-fönster, som vi ser kommandot för ovan, är ett objekt och det objektet har parametrar (properties) som tex vilket konto det hör till, en mottagare, en ärenderad och lite annat. Dessa parametrar tilldelar vi fönstret genom att skriva en lista över dessa. En del av parametrarna i listan är listor, som tex recipient/mottagare.
Parametrarna för ett nytt epostmeddelande
{account:POP account Account_Name, subject:email_subject, content:email_message, recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to recipient, delivery status:unsent}}}
Så såg det ut och här är en förklaring:
account - typ och namn på det konto som du vill skicka meddelandet med.
subject - ärenderaden
content - innehållet i meddelandet
recipient - här är en lista i en lista, en mottagare består nämligen av en adress, som är en lista i sig, med namn och en adress som saker i den listan. Vidare anger man även i mottagarlistan typ av mottagare och om det är skickat eller inte till denna mottagare.
Resultatet!
Ett make-kommando brukar lämna ifrån sig ett resultat och det kan man läsa av och tilldela en variabel för att senare i scriptet kunna referera till det nyskapade objekt och kanske göra andra saker med det, som tex flytta på det, sätta fler properties eller göra något annat. Vi behöver bara tilldela en variabel resultatet, så har vi skapat en variabel vi kan använda för att referea till meddelandet vi just skapade.
set newmessage to the result
Signaturen!
Jag vill avsluta manuset med att sätta rätt signatur på mitt meddelande, för även om jag angivit rätt konto och det kontot har en standard-signatur, så dyker inte den upp i mitt nya meddelande.
Om man kollar i ordlistan för Microsoft Entourage på "draft window" så står det att det finns två properties som har med signaturen på ett meddelande att göra. Så man borde kunna sätta dessa parametrar, men hur jag än provar att skriva detta så vill det sig inte. Så istället så löste jag detta med en workaround, dvs ett annat sätt att göra samma sak. Jag sätter den parametern (vilken signatur meddelandet skall ha) med hjälp av den referens till det nya meddelandet jag just skapat genom att skriva:
set the other signature choice of newmessage to signature id 27
Här följer en förklaring av ovanstående.
set - kommandot för att tilldela en parameter eller en variabel ett värde
the other signature choice - namnet på parametern
of - jag anger att det jag givit namnet på hör till ett visst objekt
newmessage - variabeln som innehåller en referens till objektet
to - värdet jag vill tilldela följer efter to
signature id 27 - signaturen med ID 27 som jag sparat bland signaturer i min Entourage
Signature ID 27?
Jag har mer än sextio signaturer lagrade i min Entourage, du kanske inte är lika knäpp som jag, men om du vill ha en viss signatur så måste du referea till den genom att ta reda på vilket ID den har.
Ett enkelt sätt att få fram en lista på alla signaturers innehåll och vilket ID de har är följande snutt du kan klistra in i ett nytt manus-fönster.
tell application "Microsoft Entourage"
set allsigs to ""
repeat with sig in (get signatures)
set allsigs to allsigs & "ID: " & (ID of sig) & " " & (content of sig) & "\r\r"
end repeat
allsigs
end tell
Sedan skriver du bara rätt siffra på rätt ställe i ditt manus.
Det kompletta scriptet
(*
----------------------------------------------------------------
Maila Ola
----------------------------------------------------------------
Av: Ola_Remove_Me_@intelligentmammals.se", 2003-07-03
http://www.intelligentmammals.se/
Detta manus är omgjort för Entourage i Mac OS X, 2003-07-03
Detta manus gör ett nytt mail i Entourage till Ola_Remove_Me_@intelligentmammals.se
För att ta reda på vilket id som en viss signatur har, använd:
tell application "Microsoft Entourage"
set allsigs to ""
repeat with sig in (get signatures)
set allsigs to allsigs & "ID: " & (ID of sig) & " " & (content of sig) & "
"
end repeat
allsigs
end tell
*)
set Account_Name to "Intelligent Mammals.se" -- Kontonamnet i Entourage
set To_Email to "[email protected]""
set To_Name to "Ola Andersson"
-- Notera placeringen av citat-tecknet två rader längre ner, det är för att få två blankrader i
-- meddelandet. Man kan skriva \r om man vill också.
set email_subject to "XXXX"
set email_message to "Hejsan Stefan!\r\r"
(*
Nu skapar vi ett nytt meddelande med de variabler vi
satte längre upp i scriptet.
*)
tell application "Microsoft Entourage"
activate
make new draft window with properties {account:POP account Account_Name, subject:email_subject, content:email_message, recipient:{{address:{display name:To_Name, address:To_Email}, recipient type:to recipient, delivery status:unsent}}}
-- Här fixar vi en referens på meddelandet vi just skapade, så att vi kan referera till det senare:
set newmessage to the result
-- Här sätter vi signaturen, det går visst inte att göra i samma rad som make new draft...
set the other signature choice of newmessage to signature id 27
end tell
Lycka till!
Om du får problem med detta script så skriv en rad i denna tråd så hjälper jag eller någon annan dig.
Det står alla fritt att hjälpa till eller komma med frågor och kommentarer.
Jag återkommer med instruktioner för hur man sparar detta manus på rätt ställen.
/Ola