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