So, nach langem hin und her hab ich nun den Mut mich dazu nochmal zu äußern.

Problematik war die, dass es bei ein paar Anwendern das Problem gibt, das Jahrestage am falschen Tag angezeigt werden. Ursache ist bekannt (BES) und wurde hier im Forum auch schon mal diskutiert.
Nur gab es scheinbar keine Lösung oder eben nur die, die Kalendereinträge zu löschen und neu anzulegen.
Ich hab mich jetzt mal hingesetzt und hab die Problematik studiert, wenn man das so nennen kann

Die folgenden Felder des falsch dargestellten Kalendereintrages vom Typ Date/Time waren falsch und zeigten falsche Werte an
EndDate
EndTime
StartDate
StartTime
Die folgenden Felder des falsch dargestellten Kalendereintrages vom Typ Time / Date List or Range waren nicht richtig belegt.
CalendarDateTime
StartDateTime
EndDateTime
Das richtige Datum war im folgenden Feld zu finden
RepeatInstanceDates
Das Feld StartDateTime ist ausschlaggebend an welchen Tag der Jahrestag angezeigt wird.
Deswegen hab ich einen Agenten geschrieben, der den ersten Datumswert des Feldes RepeatInstanceDates mit dem ersten Datumswert des Feldes StartDateTime abgleicht.
Wenn die "Datums" nicht identisch sind, dann liegt das Problem, eines falsch dargestellten Kalendereintrages vor.
Dann sind die oben genannten Felder mit falschen/kaputten Inhalten befüllt und der Agent berichtigt das.
Als kleines Feature geht der Agent dann auch noch her und verlängert die wiederholung der Jahrestage auf 50 Jahre.
Hier ist der Agent. Viellecht fallen euch noch Fehler auf oder vielleicht könnt ihr den Agenten auch für euch nutzen.
Bei uns funktioniert der Agent aufjedenfall

Danke für eure Hilfe!
Chris
| %REM |
| Agent Jahrestage reparieren |
| Created Mar 1, 2012 by Chris |
| Description: Comments for Agent |
| %END REM |
| Option Public |
| Dim session As NotesSession |
| Dim db As NotesDatabase |
| Dim doc As NotesDocument |
| Dim view As NotesView |
| Dim i As Double |
| Dim Betreff As String |
| Dim Datum As Variant |
| Dim Start As Variant |
| Dim Ende As Variant |
| Dim Startdatum As NotesDateTime |
| Dim Enddatum As NotesDateTime |
| Dim ArrayNr As Integer |
| Dim StartDateTimeA(49) As Variant |
| Dim EndDateTimeA(49) As Variant |
| Dim BedingungDatum As String |
| Dim Checkdatum As String |
| |
| Sub Initialize |
| On Error GoTo Finish |
| Set session = New NotesSession |
| Set db = session.CurrentDatabase |
| Set view = db.Getview("($MeetingsOnMyCalendar)") |
| Set doc = view.Getfirstdocument() |
| i = 0 |
| Set ende = session.CreateDateTime("20:00:00") |
| Set start = Session.CreateDateTime("04:00:00") |
| BedingungDatum = "26.03.2011" |
| While Not doc Is Nothing |
| If doc.form(0) = "Appointment" Then ' Wenn die Maske des Dokuments "Appointment" ist |
| If doc.Appointmenttype(0) = "1" Then ' Wenn der Typ des "Appointments" = 1 - sprich "Jahrestag" ist |
| Betreff = doc.Subject(0) |
| If (InStr(Betreff,"(Deutschland)")) =0 Then ' Wenn der Titel des Dokuments nicht "(Deutschland)" enthält - hier werden importierte Feiertage aussortiert |
| Set Datum = session.CreateDateTime(Left(doc.RepeatInstanceDates(0), 10)) |
| If Cstr(Left(doc.Startdatetime(0),10)) <> CStr(Datum.Dateonly) Then ' Wenn der erste DatumsWert des Feldes Startdatetime nicht dem ersten DatumsWert des Feldes RepeatInstanceDates entspricht |
| ArrayNr = 0 |
| Set Startdatum = New NotesDateTime(Datum.Dateonly + " " + start.timeonly) |
| Set Enddatum = New NotesDateTime (Datum.Dateonly + " " + ende.timeonly) |
| Print "-----------------" + Betreff + "-----------------" |
| Call doc.replaceItemvalue("EndDate",datum) |
| Call doc.replaceItemvalue("EndTime",ende) |
| Call doc.ReplaceItemvalue("StartDate",datum) |
| Call doc.ReplaceItemValue("StartTime",start) |
| ForAll z In doc.RepeatInstanceDates ' Wenn einer der Datumswerte im Feld RepeatInstanceDates Jünger ist, als ein Jahr, dann wird der Jahrestag um 50 Jahre lang wiederholt |
| Checkdatum = Left(z,10) |
| If DateValue(Checkdatum) > DateValue(BedingungDatum) then |
| ForAll z1 In StartDateTimeA |
| z1 = Startdatum.LSLocalTime |
| Call Startdatum.Adjustyear(1) |
| End ForAll |
| ForAll z2 In EndDateTimeA |
| z2 = Enddatum.LSLocalTime |
| Call Enddatum.Adjustyear(1) |
| End ForAll |
| Call doc.Replaceitemvalue("CalendarDateTime", StartDateTimeA) |
| Call doc.Replaceitemvalue("RepeatInstanceDates", StartDateTimeA) |
| Call doc.Replaceitemvalue("StartDateTime", StartDateTimeA) |
| Call doc.Replaceitemvalue("EndDateTime", EndDateTimeA) |
| Exit Forall |
| End if |
| End ForAll |
| Call doc.save(True,False) |
| Betreff = "" |
| Datum = "" |
| i = i+1 |
| End If |
| End if |
| End If |
| End If |
| Set doc = view.Getnextdocument(doc) |
| Wend |
| Print i " Dokumente bearbeitet" |
| Exit Sub |
| Finish: |
| Print "Ein unvorhergesehener Fehler ist aufgetreten:" Betreff |
| Print i " Dokumente bearbeitet" |
| End Sub |