• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Mit Automator - Intelligente Adressbuch Gruppen erstellen lassen

ml.User

Gloster
Registriert
10.01.07
Beiträge
63
Hi,

ich ordne auf meinem iMac meine Kontakte unter anderem mit intelligenten Gruppen. Somit bleiben diese Gruppen immer aktuelle wenn neue Kontakte mit bestimmten Eigenschaften hinzukommen. Leider synchronisiert MobileMe keine intelligenten Gruppen auf seine Wolke bzw. auch nicht auf das iPhone. "Normale" Gruppen werden jedoch synchronisiert.

Nun habe ich mir gedacht das der Automator evtl. dabei behilflich sein kann. Ich habe mir folgendes überlegt und wollte fragen ob mir jemand erklären kann wie das genau funktionieren beim Automator funktionieren könnte.

> Automator filtert bestimmte Kriterien (Gibt es bereits in Automator: Bibliotek > Kontakte > Adressbuch-Objekt
filtern")
> Automator erstellt mit diesen gefilterten Kriterien verschiedene Gruppen
(z.B. alle Kontakte mit dem Begriff "Kollegen" im Notizfeld in eine Gruppe kopieren)
> Automator script abspeichern und jeden Sonntag z.B. einmal durchlaufen lassen
> Am Sonntag soll das Script entweder die Gruppen löschen und neu erstellen oder Kontakte neu hinzufügen
die während der Woche erstellt worden sind

Ist so etwas möglich?

Viele Grüße,
ml
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo!
Wenn du schon so nett fragst, dann möchte ich dir gerne helfen :)

Eigentlich hast du dein Anliegen klar formuliert, dennoch habe ich eine Verständnisfrage:
In welchem Fall sollen die Gruppen wieder gelöscht werden? Wenn sie "leer" sind?

Vorweg: Eigentlich würde man das "professionell" mit einem Skript und launchd erstellen (Die Freeware Anwendung Lingon würde einem helfen, das einzurichten... )

Der Automator hat nicht die nötigen Aktionen in seiner Bibliothek, um das "fertig vorformuliert" zu erstellen.
Ich gebe dir jetzt mal zwei Lösungswege:

Neuer Workflow mit Vorlage "iCal Erinnerung":
  1. - Aktion Adressbuch-Kontakte suchen (nicht filtern! :) )
  2. - Aktion AppleScript ausführen
    Code:
    on run {input, parameters}
    	
    	tell application "Address Book"
    		if not (exists group "Test") then make new group with properties {name:"Test"}
    		repeat with thePerson in input
    			add thePerson to group "Test"
    		end repeat
    		save
    		
    	end tell

"Test" kannst du ja ersetzen.
Wenn du den Workflow speicherst, wurde iCal ein neues Ereignis hinzugefügt (mit dem aktuellen Zeitstempel)
Öffne iCal und bearbeite es (Zeit, Kalender, wiederholen täglich oder wöchentlich oder wie auch immer).

Neuer Workflow mit Vorlage "Ordneraktion":

Die gleichen Aktionen wie eben, aber beim Speichern diesem Ordner angehängt:
~/Library/Application Support/AddressBook/Metadata

Jetzt wird jedes mal, wenn du am Mac dem Adressbuch einen Kontakt hinzufügst, der Ablauf gestartet.
Vorteil: Immer aktuell und das Adressbuch ist eh gerade geöffnet (da es ja sonst unweigerlich durch den Workflow geöffnet würde)
Nachteil: Ordneraktionen haben den Ruf, nicht ganz zuverlässig zu sein und starten eventuell manchmal nicht. Zumindest galt das für 10.5. In 10.6 soll das angeblich behoben sein...
Ob das auch funktioniert, wenn das Adressbuch über MobileMe neue Daten erhält, weiß ich nicht -- meinem Verständnis nach sollte es aber..

------------------------------------------

Für weitere zu erstellende Gruppen wiederholst du die zwei Aktionen einfach in dem Workflow (und passt sie an)
Achte aber darauf, dass sie nicht den "Input" der vorherigen erhalten!
Also in den Kopf der dritten (und fünften usw.) Aktion einen Rechtsklick und Eingabe ignorieren wählen

Gruß
 

ml.User

Gloster
Registriert
10.01.07
Beiträge
63
Super!

Vielen lieben Dank für die ausführliche Beschreibung. Leider tritt noch ein Fehler bei der Methode 1 auf.

Bei ausführen des Scripts erscheint: Es wurde „Zeilenende, etc.“ erwartet, aber ein „Skiptende“ wurde gefunden.
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Stimmt. Ich habe eine Zeile vergessen ...

Code:
on run {input, parameters}
	
	tell application "Address Book"
		if not (exists group "Test") then make new group with properties {name:"Test"}
		repeat with thePerson in input
			add thePerson to group "Test"
		end repeat
		save
		
	end tell
	
	return input
end run
 

ml.User

Gloster
Registriert
10.01.07
Beiträge
63
Fast perfekt!

Hi Sedna,

vielen Dank! Das funktioniert ja schon fast perfekt. Jetzt hab ich noch eine kleine Frage.
Kann man beim ausführen des Scripts die Gruppe davor leeren / Kontakte in der Gruppe
löschen und diese neu einspielen?

Wenn im Moment ein Kontakt auf Status "Beruflich" ist und ich irgendwann "Beruflich"
entferne und "Privat" eintrage dann beleibt er leider trotzdem in "Beruflich" stehen.

Das war der Grund meiner ersten Frage wann eine Gruppe bzw. deren Inhalt davor gelöscht
werden sollte. Mein aktuelles nicht ganz funktionstüchtiges (iCalBirthdays) wendet diese
Technik bei jedem neuen "Refresh" an. Somit würde er alle löschen und neu einspielen.

Viele Grüße und ein schönen Abend!
ml
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo!

Hier die Variante:
Falls schon eine Gruppe mit dem Namen existiert, so wird sie gelöscht.
Ich habe noch eine Variable eingefügt, so ist das weniger Schreibarbeit (man muss nur noch ein mal den richtigen Namen eintragen)

Code:
on run {input, parameters}
	
	tell application "Address Book"
		set theGroup to "Test"
		try
			delete group theGroup
		end try
		make new group with properties {name:theGroup}
		repeat with thePerson in input
			add thePerson to group theGroup
		end repeat
		save
		
	end tell
	
	return input
end run

Gruß
 

ml.User

Gloster
Registriert
10.01.07
Beiträge
63
Hi sedna,

vielen lieben Dank! Funktioniert hervorragend!

Das Script wird jetzt via iCal jeden Sonntag bei mir ausgeführt. Gibt es den die Möglichkeit das das ganze im Hintergrund ausgeführt wird ohne das der Automator
sichtlich im Dock erscheint? Ich habe noch einen Befehl hinzugefügt das es automatisch geschlossen wird. (tell application "Automator" to quit)
Ich habe bei dem iCalBirthdays Script gesehen das dieses nur oben in der Taskleiste kurz angezeigt wird. Kann man das hier auch machen?

Vielen Dank für die große Hilfe!

Viele Grüße,
ml
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo!

Freut mich und ja, das geht!

Erstelle deinen Arbeitsablauf neu. Diesmal aber nicht als iCal Plug-In, sondern mit der Vorlage "Arbeitsablauf". Und ohne den Zusatz "tell app Automator to quit"!
Speichere ihn im Dateiformat "Arbeitsablauf" (.workflow) in
~/Library/Workflows/Applications/iCal
Wähle die Datei im Finder an. Öffne das Infofenster (cmd-i) und ändere "Öffnen mit -> Automator Runner.app"
Dann wie gehabt ein neues iCal Ereignis erstellen mit Erinnerung: Datei öffnen -> dein.workflow

Zur Erklärung: Automator Runner kann .workflows ausführen (mit dem Standard Programm Automator würden sie geöffnet werden)

Übrigens: Was du im Dock gesehen hast, war nicht der Automator, sondern das iCal Plug-In, welches aber ein ganz ähnliches Icon hat.
In dem oben angegebenen Ordner wirst du es (mit der Endung .app) liegen sehen. Vergleiche mal die Icons
:)


- - - - - - - - - - - - - - - - - - - - - - - - - - - -


Edit:
Es gibt noch einen anderen Weg.
Das gespeicherte iCal Plug-In liegt ja als .app in dem oben angegebenen Ordner. Mit einem Rechsklick auf die Datei kannst Du dir den Paketinhalt zeigen lassen. Im Ordner Contents liegt die Datei Info.plist. In dieser kann man einen Wert ändern, dann wird das Programm nicht mehr im Dock angezeigt.
Mal davon ausgehend, dass du keinen Plist Editor installiert hast, kann man die Datei auch mit TextEditor öffnen.
Suche folgende Zeilen
<key>LSUIElement</key>
<false/>
und ändere sie in
<key>LSUIElement</key>
<true/>

Mit dem Programm Terminal und dem Befehl defaults könnte man das auch ändern (LSUIElement 1)



Gruß
 
Zuletzt bearbeitet:

ml.User

Gloster
Registriert
10.01.07
Beiträge
63
Perfekt! Funktioniert, ich hab die Methode 2 gewählt bei der ersten Methode hat der iCal mir die "App" nicht ausgewählt! Bei der 2. Methode funktioniert es wunderbar ....

Vielen Dank!

Hallo!

Freut mich und ja, das geht!

Erstelle deinen Arbeitsablauf neu. Diesmal aber nicht als iCal Plug-In, sondern mit der Vorlage "Arbeitsablauf". Und ohne den Zusatz "tell app Automator to quit"!
Speichere ihn im Dateiformat "Arbeitsablauf" (.workflow) in

Wähle die Datei im Finder an. Öffne das Infofenster (cmd-i) und ändere "Öffnen mit -> Automator Runner.app"
Dann wie gehabt ein neues iCal Ereignis erstellen mit Erinnerung: Datei öffnen -> dein.workflow

Zur Erklärung: Automator Runner kann .workflows ausführen (mit dem Standard Programm Automator würden sie geöffnet werden)

Übrigens: Was du im Dock gesehen hast, war nicht der Automator, sondern das iCal Plug-In, welches aber ein ganz ähnliches Icon hat.
In dem oben angegebenen Ordner wirst du es (mit der Endung .app) liegen sehen. Vergleiche mal die Icons
:)


- - - - - - - - - - - - - - - - - - - - - - - - - - - -


Edit:
Es gibt noch einen anderen Weg.
Das gespeicherte iCal Plug-In liegt ja als .app in dem oben angegebenen Ordner. Mit einem Rechsklick auf die Datei kannst Du dir den Paketinhalt zeigen lassen. Im Ordner Contents liegt die Datei Info.plist. In dieser kann man einen Wert ändern, dann wird das Programm nicht mehr im Dock angezeigt.
Mal davon ausgehend, dass du keinen Plist Editor installiert hast, kann man die Datei auch mit TextEditor öffnen.
Suche folgende Zeilen

und ändere sie in


Mit dem Programm Terminal und dem Befehl defaults könnte man das auch ändern (LSUIElement 1)



Gruß
 

iFumer

Erdapfel
Registriert
11.06.13
Beiträge
5
Wow sedna,

das ist klasse. Ich denke gerade über eine Teilnehmerverwaltung mit Bordmitteln nach und Dein Skript führt mich fast bis zum Ziel.

Die Idee mit der Ordneraktion ist klasse. Nur eine Frage habe ich. Ich stelle mir folgendes vor.
-> Das Skript startet, wenn eine neue Adresse eingeben wurde
-> man hat die Möglichkeit, das Kriterium nach dem gesucht werden soll festzulegen
---> (z.B. Notiz enthält "wks0613k" für Teilnehmer im Juni 2013 in Köln)
-> es wird überprüft, ob die Gruppe existiert. Wenn "nein" wird sie geschaffen
-> Adresse wird der Gruppe hinzugefügt
fertig

Wie kann ich also Deine Gruppe "test" ersetzen mit "variable aus Suchbegriff"

Ich hoffe so, dass es da eine Lösung gibt und danke für die Mühe im Voraus.

Dufte Grüße vom iFumer Uwe

EDIT
Hat sich erledigt DANKE
 
Zuletzt bearbeitet: