Adressbuch und Intelligente Gruppen

  • Ersteller Mitglied 17022
  • Erstellt am

Mitglied 17022

Gast
Scheinbar kann man nur richtige Gruppen synchronisieren :(
Daher dachte ich mir AppleScript könnte aushelfen.

Kann man irgendwie, wenn ja wie,... Das Ergebnis bestimmter Intelligenter Gruppen in eine normale Gruppe packen und dann iSync zum synchronisieren veranlassen? Danach dann die normale Gruppe wieder entfernen.

Thx4help
 

hubionmac

Tydemans Early Worcester
Registriert
25.06.04
Beiträge
393
das geht bestimmt...
ich glaube das ganz fest dran
 

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

einfach nur per drag'n drop die Einträge aus der intelligenten Gruppe in eine manuell erzeugte Gruppe nehmen?

Wenn Du's automatisieren willst, sollte das mit AppleScript gehen. Was Du brauchst ist eine Schleife die alle Einträge der Gruppe "intelligent" durchgeht und zur Gruppe "manuell" hinzufügt. Sollte nicht so schwer sein.

Gruß Stefan
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Moin,

hier mal ein Anfang zur Lösung deines Problems - sry mit dem iSync habe ich keine Erfahrung - vielleicht kann da jemand anderes aushelfen?

Das Script läßt dich aus deinen intelligenten Gruppen eine auswählen, und erzeugt dann das temporäre Duplikat, das du haben willst:

Code:
tell application "Address Book"
	
	set iGroups to (groups whose id contains "ABSmartGroup")
	set iGroupNames to {}
	repeat with iGroup in iGroups
		set iGroupNames to (iGroupNames & name of iGroup)
	end repeat
	set chosenGroupName to (choose from list iGroupNames) as string
	repeat with iGroup in iGroups
		if (name of iGroup) is chosenGroupName then
			set chosenGroup to iGroup
			exit repeat
		end if
	end repeat
	set tmpGroup to (make new group at the end of groups with properties {name:"tmp_" & chosenGroupName})
	
	try
		add people of chosenGroup to tmpGroup
		-- sync here
		delete tmpGroup
	on error
		display dialog "Error"
		delete tmpGroup
	end try
	
end tell


Grüße,

Daisy
 

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

wenn die Kontakte mal in einer manuellen Gruppe drin sind, kann iSync die abarbeiten - no probs.

Gruß Stefan.
 

Mitglied 17022

Gast
hey das schaut super aus, vielen dank!

ich bin leider noch nicht so der apple scripter... kannst du mir kurz noch erklären was da genau geschieht bzw. manche stellen verwirren etwas wie die zeile: set iGroups to {}
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
hey das schaut super aus, vielen dank!

ich bin leider noch nicht so der apple scripter... kannst du mir kurz noch erklären was da genau geschieht bzw. manche stellen verwirren etwas wie die zeile: set iGroups to {}

Kein Problem - hier noch mal eine kommentierte Fassung des obigen Scripts:

tell application "Address Book"

-- erstelle eine List aller intelligenten Gruppen:
set iGroups to (groups whose id contains "ABSmartGroup")

-- in den folgenden 4 Scriptzeilen wird eine List* der Namen dieser Gurppen angelegt:
-- es beginnt mit einer leeren List:
set iGroupNames to {}

-- Dazu verwenden wir eine Schleife - sie führt die folgenden Zeilen für alle
-- Items* in der List 'iGroups' aus (also für alle intelligenten Gruppen):
repeat with iGroup in iGroups
-- hänge den Namen der Gruppe (= die Schleifenvariable 'iGroup')
-- an die Liste 'iGroupnames' an:
set iGroupNames to (iGroupNames & name of iGroup)
-- Schleifenende:
end repeat

-- Dialog, bei dem ein Gruppenname aus der oben erzeugten Namens-List
-- ausgewählt werden kann:
set chosenGroupName to (choose from list iGroupNames) as string

-- Jetzt suchen wir zum ausgewählten Namen wieder die Gruppe aus
-- (ja, das ist leider so kompliziert (ich wüsste aber zumindest nicht,
-- wie's mit AppleScript einfacher geht) - dazu verwenden wir wieder
-- eine repeat-Schleife (s.o.):
repeat with iGroup in iGroups

-- wenn der Name stimmt, ...
if (name of iGroup) is chosenGroupName then

-- ... dann wird die Ergebnis-Variable 'chosenGroup' gesetzt und ...
set chosenGroup to iGroup
-- ... die weitere Ausführung der Schleife abgebrochen.
exit repeat
end if
end repeat


-- erzeuge eine neue Gruppe (die nicht-intelligente Temporär-Gruppe)
-- und nenne sie so, wie die intelligente Gruppe heisst, aber mit "tmp_" davor:
set tmpGroup to (make new group at the end of groups with properties {name:"tmp_" & chosenGroupName})

-- damit wir im Fehlerfall keine Probleme bekommen
-- (Fehlermöglichkeiten gibt's immer ... z.B. Platte voll etc.)
-- verwenden wir eine 'try' ... 'on error'-Konstruktion:
try
-- kopiere alle Einträge in die temporäre Gruppe:
add people of chosenGroup to tmpGroup


-- hier kannst du jetzt irgendwas mit der
-- temporären Gruppe machen ...


-- und wenn du sie nicht mehr brauchst, dann kannst du sie so
-- wieder löschen (die Originaleinträge bleiben selbstverständlich erhalten)
delete tmpGroup

-- im Fehlerfall ...
on error
-- gib eine Fehlermeldung aus und ...
display dialog "Error"
-- ... lösche die temporäre Gruppe wieder.
delete tmpGroup
end try

end tell


-- *) List = AppleScript-Bezeichnung für Feld/Array,
-- Item = AppleScript-Bezeichnung für ein Feldelement


Grüße,

D.
 
  • Like
Reaktionen: Cyrics