SD change names of properties and classes


(Alberto González Ramírez) #1

Hi everybody.
I´m having problems with a script.
I have it in my iCloud Drive.
When I open the script in my MacBook Pro everything is ok. But, when I open the script in my iMac several classes and properties have changed their names to strange “values”.
This is the script. These values are in bold.
I´m running SD 6.0.5 in macOS Sierra 10.12.6
Thank you.

(* En nuestro caso la imagen que queremos adjuntar al correo de felicitación se llama
Portada Twitter copia, que está en el escritorio del usuario automatizandomanzanas.com
*)
property ruta_imagen : “/Users/automatizandomanzanas.com/Desktop/Portada Twitter copia.png”

try
–Primero obtenemos la lista de personas de nuestra agenda que cumplen años hoy
set lista_contactos_cumpleanos_hoy to obtener_lista_contactos_que_cumpleanos_hoy()
–Si la lista está vacía, notificamos.
if lista_contactos_cumpleanos_hoy is {} then
display notification “Hoy no cumple años nadie.” with title “Script ejecutado.”
–Si por el contrario, tenemos uno o más contactos que cumplen años, les mandamos el correo felicitándoles y notificamos.
else
mandar_emails_de_felicitacion(lista_contactos_cumpleanos_hoy)
–notificación tipo "Se han mandado 2 correos."
display notification “Se han mandado " & (count of lista_contactos_cumpleanos_hoy) & " correos.” with title "Felicitaciones enviadas."
end if
–si ocurriese cualquier tipo de error en el script, se notificaría. No es objeto de este artículo desarrollar un gestor de errores potente.
on error
display notification "Error"
end try

(*
Handler (función) que devuelve el listado de contactos que cumplen año en el día actual de ejecución del script.
Primero obtenemos una lista (lista_contactos) de todos los contactos que tienen relleno el campo fecha de nacimiento (birth date).
Seguidamente, recorremos dicha lista y comprobamos que tanto el día como el mes de la fecha de nacimiento coincidan
con el día y mes de la fecha actual.
Si es así, añadimos el contacto a la variable (lista) lista_cumpleanos
Una vez ejecutado el bloque repeat, devolvemos la lista de contactos que cumplen años (lista_cumpleanos)
*)
on obtener_lista_contactos_que_cumpleanos_hoy()
set fecha_hoy to current date
set dia_hoy to day of fecha_hoy
set mes_hoy to month of fecha_hoy
set lista_cumpleanos to {}
tell application "Contacts"
launch
delay 1
set lista_contactos to get every «class azf4» whose («class az11» is not missing value)
repeat with contacto in lista_contactos
set fecha_nacimiento to «class az11» of contacto
if (day of fecha_nacimiento is dia_hoy and month of fecha_nacimiento is mes_hoy) then
set end of lista_cumpleanos to contacto
end if
end repeat
end tell
return lista_cumpleanos
end obtener_lista_contactos_que_cumpleanos_hoy

(*
Handler (procedimiento) que implementa el envío de los correos de felicitación a los contactos de nuestra agenda
que cumplen años en la fecha actual.

  1. Recibe como argumento de entrada una lista de contactos (que son los que hemos obtenido con el handler anterior).
  2. Por cada contacto que cumple años extraemos, para personalizar el correo, su nombre y la primera dirección de correo
    electrónico. Ojo, suponemos que los contactos de nuestra agenda tienen, al menos, un email asociado.
  3. Una vez obtenida dicha información, creamos el correo, personalizamos el asunto, cuerpo y añadimos la imagen
    declarada en la propiedad ruta_imagen de la línea de código 4. Finalmente, damos 1 segndo para que se cargue
    la imagen y mandamos el correo.
    *)
    on mandar_emails_de_felicitacion(listaContactos)
    tell application "Mail"
    launch
    repeat with contacto in listaContactos
    tell application "Contacts"
    set nombre_contacto to get name of contacto
    set correo to get «class az17» of first «class az21» of contacto
    end tell
    set asunto_correo to "¡Feliz cumpleaños " & nombre_contacto & "!"
    set cuerpo_correo to "Te deseo que pases un fantástico día con tu familia y amigos."
    set correo_felicitacion to make new outgoing message with properties {subject:asunto_correo, content:cuerpo_correo}
    tell correo_felicitacion
    make new to recipient with properties {name:nombre_contacto, address:correo}
    make new attachment with properties {file name:ruta_imagen}
    delay 1
    send
    end tell
    end repeat
    end tell
    end mandar_emails_de_felicitacion

(Nigel Garvey) #3

Hi.

It may just be that you need to have Contacts open when you open or recompile the script.

NG


(Alberto González Ramírez) #4

Thanks Nigel.
If Contacs.app is already opened, it´s ok.
But I have never had this issue before.
How could I overcome this?


(Nigel Garvey) #5

Hi Alberto.

Addressing Contacts by its ID instead of its name seems to work:

tell application id "com.apple.AddressBook"
	
	launch
	
	delay 1
	
	set lista_contactos to get every person whose (birth date is not missing value)
	
	-- etc.
end tell