Hallo @all,
ich habe hier wieder ein Problem mit einer ganztägigen Veranstaltung. Unter R5.07a habe ich eine Datenbank (ach was?) mit einer Maske für Urlaubseinträge zur Übersicht für die Kollegen der jeweiligen Abteilung. Ebenso gibt es eine Schaltfläche für den Bearbeiter zum Eintragen des Urlaubes in den persönlichen Kalender.
Unter R5 benutzte ich folgenden Code für den Eintrag:
Sub Click(Source As Button)
Const SecInDays = 86400 ' 60 sec * 60 min * 24 h = 1 day
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim maildb As NotesDatabase
Dim uidoc As NotesUiDocument
Dim thisdoc As NotesDocument
Dim doc As NotesDocument
Dim datetime1 As New NotesDateTime("")
Dim datetime2 As New NotesDateTime("")
Dim itemStart As NotesItem
Dim itemEnd As NotesItem
MailDatenbank = Evaluate("@MailDbName")
If MailDatenbank(1) = "" Then
Messagebox "Auf Ihre Maildatenbank kann nicht zugegriffen werden.", 16, "Datenbank nicht gefunden - Fehler"
Exit Sub
End If
Set uidoc = ws.CurrentDocument
Set thisdoc = uidoc.Document
BlockArt = uidoc.FieldGetText("BlockStatus")
Set itemStart = thisdoc.GetFirstItem( "BlockVon" )
Set datetime1 = itemStart.DateTimeValue
Set itemEnd = thisdoc.GetFirstItem( "BlockBis" )
Set datetime2 = itemEnd.DateTimeValue
Set maildb = New NotesDatabase(MailDatenbank(0),MailDatenbank(1))
Dim dateTimeStart As NotesDateTime
Dim dateTimeEnd As NotesDateTime
Wieviel = datetime2.TimeDifference( datetime1 )
If (Wieviel =< 0) Then
Messagebox "Bitte überprüfen Sie Ihre Dateneingabe.", 16, "Daten - Fehler"
Exit Sub
End If
Pruef = Wieviel / SecInDays
Durchlaufflag = True
Set datetimetemp1 = itemStart.DateTimeValue
Set datetimetemp2 = itemStart.DateTimeValue
Call datetimetemp2.AdjustDay( 6 )
While (Durchlaufflag)
If (Wieviel > 0) Then
If (Pruef > 6) Then
' Split der Tage, da mehr als eine Woche
Durchlaufflag = True
Else
' Erster Eintrag unter einer Woche oder letzter Eintrag
Set datetimetemp2 = datetime2
Durchlaufflag = False
End If
Elseif (Pruef = 0 & Wieviel = 0) Then
Durchlaufflag = False
Goto skip
End If
'Erstellen einer ganztaegigen Veranstaltung innerhalb der Maildatenbank des Users einzelne Blocks a 7 Tage
Set doc = New NotesDocument(maildb)
doc.Form = "Appointment"
doc.AppointmentType = "2"
doc.Categories = BlockArt
doc.ExcludeFromView = "D"
doc.BookFreeTime="0"
doc.~$BusyPriority = "1"
doc.~$PublicAccess = "1"
doc.~_ViewIcon = 9
Who = session.UserName
doc.~$BusyName = Who
doc.Chair = Who
doc.DocAuthors = Who
doc.From = Who
doc.Principal = Who
docOrgTable = "C0"
doc.Subject = "Block" & counter & ": " & BlockArt & " ( " & datetime1.DateOnly & " - " & datetime2.DateOnly & " ) NICHT LÖSCHEN"
Set dateTimeStart = session.CreateDateTime ( datetimetemp1.DateOnly & " " & "04:10:00 AM" )
Set dateTimeEnd = session.CreateDateTime ( datetimetemp2.DateOnly & " " & "20:10:00 AM" )
Set doc.CalendarDateTime = dateTimeStart
Set doc.StartDate = dateTimeStart
Set doc.EndDate = dateTimeEnd
Set doc.StartDateTime = dateTimeStart
Set doc.EndDateTime = dateTimeEnd
success = doc.ComputeWithForm( False, False )
If success Then
Call doc.Save( True, True )
End If
' Ende des Kalnderblockeintrages
Wieviel = datetime2.TimeDifference( datetimetemp2 )
Pruef = Wieviel / SecInDays
temp1 = Cstr(datetimetemp2.DateOnly)
Set datetimetemp1 = New NotesDateTime(temp1)
Call datetimetemp1.AdjustDay( 1 )
Call datetimetemp2.AdjustDay( 7 )
Wend
skip:
Msgbox "Der gewünschte Eintrag wurde vorgenommen.", 0, "Rückmeldung"
End Sub
Bis zur Migration lief auch alles wunderbar (o.k., das hier ist grottenschlechter Code und nicht gerade übersichtlich und die OK-Rückmeldung kommt auch bei einem Fehler, aber es funzte - und als Erläuterung: der Split auf jeweils 7 Tage war bei uns ein Anzeigeproblem der geblockten Zeit).
Nach der Migration muß ich feststellen, daß
1. alle Einträge, die auf diese Weise vorgenommen wurden, nur mit einem Tag im Kalender stehen und erst wieder auf alle Tage verteilt werden, wenn die Veranstaltung nochmal gespeichert wird (anscheinend werden in R6 einige neue Felder für diese Anzeige berechnet).
2. der Code unter R6 gar nicht mehr läuft. Setze ich
success = doc.ComputeWithForm( False, False )
auf
success = doc.ComputeWithForm( False, True )
bekomme ich als Fehlermeldung:
Falscher Datentyp für Operator oder @Funktion: Zahl erwartet.
Die Suche in den Kalenderdokumenten selbst gestaltet sich etwas schwierig:
Meine alten Einträge aus R5 haben vor dem Speichern ca. 20 Felder, nach dem Speichern in R6 sind es 150.
Weiß jemand zufällig, welche Feldvalidierung da dazwischen haut und welche Felder ich setzen muß? Ich weiß, C & S ist nicht trivial, aber vielleicht hatte ja jemand schon das Problem oder kennt eine Übersicht der neuen Felder in R6 die zu setzen sind (unter R5 gab es dafür irgendwo im web eine hübsche Tabelle).
Schon jetzt Danke für jede Aufwendung von Gehirnschmalz.