ICal / Adressbuch - Abgleich-Troubles

Dieses Thema im Forum "Software" wurde erstellt von loki777, 16. Oktober 2005.

  1. loki777

    loki777 New Member

    Hi macys!

    Ich hab da n kleines aber nerviges Problem mit ICal. Ich kann zwar die Geburtstage aus dem Adressbuch übernehmen, wenn ich aber noch andere "Jahrestage" im Adressbuch eingebe, werden die in ICal nicht angezeigt.

    Leider gibt die Hilfe keine Auskunft und auch mit der Sucher hier bin ich nicht wirklich weit gekommen.

    Bitte helft mir, den Namenstag meiner Oma nicht nochmal zu übersehen ;o).
     
  2. rufus

    rufus New Member

    da musst du ein script schreiben.

    betrachte jeden datensatz aus adressbuch
    wenn feld namenstag nicht null
    erzeuge neuen termin in ical mit datum aus feld namenstag und der bezeichnung "Namenstag" + <Vorname> + <Name>

    so in etwa sollte es gehen


    rufus
     
  3. rufus

    rufus New Member

    sorry ich sehe gerade, dass es nicht möglich ist eigene felder zu definieren, die einzige möglichkeit die ich da sehe ist das notizfeld zu missbrauchen.

    um das richtig zu machen, sollte man da aber einen metamarker einführen z.b.
    <namenstag>dd/mm</namenstag>

    das hat den vorteil, dass man weiterhin beliebige notizen eingeben kann, die prüfung erfolgt dann nicht auf feld not null sondern notiz enthält pattern...

    ein anderer ansatz wäre eine liste mit allen namenstag-namen + tag für ein jahr und das durchlaufen der adressen gegen diese liste:

    wenn vorname von datensatz in liste
    dann erzeuge event an tag des namens mit bezeichnung "namenstag" +
    vorname + name

    rufus
     
  4. loki777

    loki777 New Member

    ehrlich gesagt hab ich (ex-dosen-benutzer) mir nicht vorstellen können, dass diese funktion nicht implementiert wurde.

    gibts denn bei apple keine hochzeitstage zu vergessen? *g*

    wozu soll es gut sein, alternative daten bei kontakte einzusetzen, wenn das zeugs nicht auch in ical angezeigt wird?

    leider kommt noch dazu, dass sich meine programmierkenntnisse nach basic nicht wirklich weiterentwickelt haben ;o).
     
  5. rufus

    rufus New Member

    bis 10.3 waren auch die geburtstage nicht implementiert, das gibt es erst seit tiger.
    ggf. gibt es schon so ein script oder tool, ich würde da mal suchen.

    wo wollte man den seitens apple den da anfangen, jeder hat andere vorstellungen an was er automatisch erinnert werden will.

    und das mit dem hochzeitstag ist ja nun wirklich kein problem, da dies ein einziger jährlich wiederkehrender event ist, für den bbraucht es keinen automatismus, eine derartige information hat auch IMHO nichts im adressbuch zu suchen.

    ich bin software-ingenieur aka programmierer ;-)

    mal sehen, du hast mit deiner frage einen gewissen implementierungstrieb in mir geweckt, vielleicht habe ich die woche mal ein stündchen zeit, mich mit applescript zu befassen...

    rufus
     
  6. rufus

    rufus New Member

    dann wird es zeit sich mal mit applescript zu befassen, ich mache berufsbedingt auch selten was damit, finde es aber aus programmierersicht eine sehr coole sprache, die sich von ihrer syntax her stark an die englische sprache anlehnt. -> nix kaka-basic (ihh-bäh)

    rufus
     
  7. loki777

    loki777 New Member

    naja ich bin ja nicht verheiratet - und natürlich kann ich wiederkehrende events auch reinspeichern (wenn du aber als moslem gleich 5 frauen hast, wirds schon schwieriger ;o)

    ob aber ein geburtstag oder ein anderes datum übernommen wird, sollte ja wohl keinen grossen utnerschied machen.

    in meiner familie werden die namenstage zum anlass genommen um ein kleines familientreffen stadtfinden zu lassen. um nicht (wie letzten samstag) kurzfristig alles umplanen zu müssen (weil oma namenstag hat und wir zum kaffee geladen sind) hätte ich eben gerne einige namenstage mitreingenommen.

    beim adressbuch klappts ja wunderbar - deswegen finde ich es sehr seltsam, dass die sache nicht automatisch übertragen wird.

    wenn ich wieder zuhause an meinem pb bin, werd ich mal abchecken ob der automator hier hilfreich sein könnte.
     
  8. rufus

    rufus New Member

    nimm das... ;-)
    einfach in ein neues skript-editor dokument einfügen speichern und laufen lassen


    --> erzeugt aus mit "Namenstag" benannten Adressbuch Datum Feldern iCal-Events
    --> die in einen Kalender "Namenstage" eingetragen werden.
    --> das sollte fürs erste reichen, oder?

    set withNameDay to {}

    tell application "Address Book"
    with timeout of 60 seconds
    -->query the folks with a nameday entry from address book
    repeat with this_person in every person
    if custom date's label of this_person contains "Namenstag" then
    set customDates to every custom date of this_person
    -->display dialog length of customDates
    set myItem to {}
    repeat with one in customDates
    if (one's label as string) is equal to "Namenstag" then
    set myItem to one
    end if
    end repeat

    set listEntry to {nameday:"", fullname:""}

    set thisDate to (value of myItem as string)

    set first_name to first name of this_person as string
    set last_name to last name of this_person as string
    set full_name to first_name & " " & last_name

    set listEntry to {nameday:thisDate, fullname:full_name}
    copy listEntry to the end of withNameDay
    end if
    end repeat

    --> kalender erzeugen
    set theYear to year of (current date)
    set theCalName to "Namenstage"
    set the alarmTrigger to -60 * 36

    tell application "iCal"
    set x to count of (every calendar where title is theCalName)
    if x = 0 then make new calendar with properties {title:theCalName}
    set theCalendar to first calendar where title is theCalName
    end tell

    repeat with one in withNameDay
    -->we have all folks in a list, let's process the cal
    tell application "iCal"
    set displayString to "Namenstag " & one's fullname
    set theDate to date (one's nameday as string) as date
    set this_event to make new event at the end of events of theCalendar with properties {start date:theDate, summary:displayString, allday event:true}
    --> setting the alarm for the event
    tell this_event
    make new mail alarm at end of mail alarms with properties {trigger interval:alarmTrigger}
    end tell
    end tell

    end repeat
    end timeout
    end tell
     
  9. loki777

    loki777 New Member

    GENIAL

    Herzlichen Dank

    Mit dem Automator hab ichs nicht hinbekommen, da ich keine selbst definierten Felder in die Suchabfrage eingeben konnte.

    toll

    DANKE NOCHMAL
     
  10. rufus

    rufus New Member

    es ist noch nicht wirklich schön, aber dafür dass ich nur alle schaltjahre mal was mit applescript mache ist es ganz ok für so auf die schnelle.

    wenn ich muse habe, werde ich es noch ein wenig aufräumen und ggf. parameterisieren, so dass man dann so sachen wie kalendernamen etc. bestimmen kann.

    ein funktionaler bug ist noch folgender:
    wenn man das script mehrmals aufruft werden doppeleinträge erzeugt, man muss im moment den namenstag kalender an besten vorher wegwerfen.

    aber das zu lösen ist kein problem: entweder das script schmeisst den kalender selbst vorher weg, oder aber prüft auf das vorhandensein ggf. schon bestehender events

    mal sehen...

    rufus
     
  11. loki777

    loki777 New Member

    mittels automator und skript hab ich das "problem" mit den mehrfacheinträgen sehr einfach lösen können.

    den alarmtermin hab ich manuell verändert und zur absoluten glückseligkeit fehlt mir nur noch eine jährliche wiederholung.

    falls du mal tipps bei betriebskostenabrechnungen oder staatsverrechnung brauchst, stehe ich jederzeit zur verfügung *lach*.
     
  12. rufus

    rufus New Member

    ja man weiss ja nie, was da noch so auf einen zukommt. ;-)

    rufus

    p.s. As a programmer, I find the AppleScript language to be rather strange and hard to work with... (aaron hillegass)

    dem schliesse ich mich an :))
     
  13. rufus

    rufus New Member

    --> erzeugt aus Adressbuch Datum Feldern (Custom Date) iCal-Events
    --> die in einen Kalender "Custom Dates" eingetragen werden.


    --> Copyright 2005 by Marco Blum, B.Sc. Informatik
    -->This program is free software; you can redistribute it and/or modify
    --> it under the terms of the GNU General Public License as published by
    --> the Free Software Foundation; either version 2 of the License, or
    --> (at your option) any later version.

    --> This program is distributed in the hope that it will be useful,
    --> but WITHOUT ANY WARRANTY; without even the implied warranty of
    --> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    --> GNU General Public License for more details.
    --> http://www.gnu.org/licenses/licenses.html#GPL


    --> remembers the name of the last created calendar to trash it,
    --> before the creation of an new one, even in case of a
    -->renaming, to avoid double entries
    property myLastCustomDatesCalName : "Custom Dates"

    set customDatesEvents to {}

    --> fetch the custom dates from address book
    tell application "Address Book"
    with timeout of 10 seconds
    -->query the folks with a nameday entry from address book
    repeat with thisPerson in every person
    if custom date of thisPerson is not null then
    set customDates to every custom date of thisPerson
    -->display dialog length of customDates
    set myItem to {}
    repeat with one in customDates
    set myItem to one

    set thisDate to (value of myItem as date)
    set thisDescription to myItem's label

    set thisName to first name of thisPerson & " " & last name of thisPerson

    if email of thisPerson is not null then
    set thisEmail to thisPerson's first email's value
    else
    set thisEmail to ""
    end if

    set listEntry to {theDate:thisDate, theName:thisName, theDescription:thisDescription, theEmail:thisEmail}

    copy listEntry to the end of customDatesEvents
    end repeat
    end if
    end repeat

    end timeout
    end tell

    --> create calendar
    set theYear to year of (current date)

    display dialog "Bitte das Jahr für das der Kalender erzeugt werden soll, eingeben:" default answer theYear
    set theYear to (text returned of result) as number


    set theCalName to myLastCustomDatesCalName

    display dialog "Bitte Namen des Kalenders in dem die Ereignisse angezeigt werden sollen, eingeben:" default answer theCalName
    set theCalName to (text returned of result)

    --> would be nice to set up the alarmtime/method here within a dialog ;-)
    set the alarmTrigger to -60 * 36


    tell application "iCal"
    with timeout of 10 seconds
    set x to count of (every calendar where title is myLastCustomDatesCalName)
    if x > 0 then
    delete (every calendar where title is myLastCustomDatesCalName)
    end if

    make new calendar with properties {title:theCalName}
    set theCalendar to first calendar where title is theCalName
    end timeout
    end tell

    set myLastCustomDatesCalName to theCalName

    repeat with one in customDatesEvents
    -->we have all folks in a list, let's process the cal
    tell application "iCal"
    with timeout of 10 seconds
    set displayString to one's theDescription & " " & one's theName
    set theDate to one's theDate
    set thisEvent to make new event at the end of events of theCalendar with properties {start date:theDate, summary:displayString, allday event:true}

    --> setting the alarm for the event
    tell thisEvent
    make new mail alarm at end of mail alarms with properties {trigger interval:alarmTrigger}
    end tell

    --> setting the attendee for the event
    tell thisEvent
    make new attendee at end of attendees with properties ¬
    {display name:eek:ne's theName, email:eek:ne's theEmail}
    end tell
    end timeout
    end tell
    end repeat
     

    Anhänge:

Diese Seite empfehlen