So, hier kommt mal eine funktionierende Version eines Scripts.
In dem Konfigurations-Dokument ist der Administrations-Server hinterlegt. Hintergrund ist, dass man Termine nicht nur für sich selbst eintragen kann, sondern auch für andere User - und deren Mail-File wird dann über den Registrierungs-Server abgefragt.
Sub makeAppointment(User As String, Datum As String, Start As String, Ende As String, Subject As String, Body As String, Location As String)
' Konfiguration lesen
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim dateTime As New NotesDateTime( "04/14/1970" )
Dim confdoc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.search("Form = 'Konfiguration'", dateTime, 0)
If (collection.Count = 1) Then
Set confdoc = collection.Getfirstdocument()
Elseif (collection.Count > 1) Then
Msgbox "Es existiert mehr als eine Konfiguration. Bitte wenden Sie sich an das Team IT.", MB_ICONSTOP
Exit Sub
Elseif (collection.Count < 1) Then
Msgbox "Es konnte keine Konfiguration gefunden werden. Bitte wenden Sie sich an das Team IT.", MB_ICONSTOP
Exit Sub
End If
' Mail-Datenbank der anzumeldenden Person suchen
Dim reg As New NotesRegistration
Dim MailServer As String
Dim MailFile As String
Dim maildb As NotesDatabase
reg.RegistrationServer = confdoc.Server(0)
reg.GetUserInfo User, MailServer, MailFile
Set maildb = New NotesDatabase(MailServer, MailFile)
' Termin erstellen
Dim termin As New NotesDocument(maildb)
Dim terminName As New NotesName(User)
Dim StartDatum As New NotesDateTime(Datum & " " & Start)
Dim EndDatum As New NotesDateTime(Datum & " " & Ende)
Dim item As NotesItem
With termin
' Indiviudelle Werte
.~$AlarmDescription = Subject
.~$BusyName = terminName.Canonical
.location = Location
.Subject = Subject
Set item = New NotesItem(termin, "$AltPrincipal", session.UserName, NAMES)
Set item = New NotesItem(termin, "AltChair", terminName, NAMES)
Set item = New NotesItem(termin, "Chair", terminName, NAMES)
Set item = New NotesItem(termin, "From", session.UserName, NAMES)
Set item = New NotesItem(termin, "Principal", session.UserName, NAMES)
Dim TBody As New NotesRichTextItem(termin, "Body")
TBody.AppendText Body
Set .~$NoPurge = EndDatum
Set .CalendarDateTime = StartDatum
Set .StartDate = StartDatum
Set .StartDateTime = StartDatum
Set .StartTime = StartDatum
Set .EndDate = EndDatum
Set .EndDateTime = EndDatum
Set .EndTime = EndDatum
' Standardwerte
.~$Alarm = 1
.~$AlarmMemoOptions = ""
.~$AlarmOffset = -60
.~$AlarmSendTo = ""
.~$BusyPriority = "1"
.~$CSVersion = "2"
.~$LangChair = ""
.~$LangPrincipal = ""
.~$PublicAccess = "1"
.~_ViewIcon = 72
.Alarms = "1"
.AppointmentType = "0"
.BookFreeTime = ""
.Categories = "Veranstaltung"
.Form = "Appointment"
.OrgConfidential = ""
.OrgTable = "C0"
.Repeats = ""
.SequenceNum = 1
Dim exclude ( 1 To 2 ) As String
exclude(1) = "D"
exclude(2) = "S"
.ExcludeFromView = exclude
If (Not .ComputeWithForm(True, False)) Then
Msgbox "Beim Erstellen des Kalendereintrages ist ein Fehler aufgetreten. Bitte prüfen Sie den Eintrag manuell.", MB_ICONSTOP
End If
If (Not .Save(True, True)) Then
Msgbox "Beim Speichern des Kalendereintrages ist ein Fehler aufgetreten. Bitte erstellen Sie den Eintrag manuell.", MB_ICONSTOP
Else
Msgbox "Der Kalendereintrag wurde gespeichert.", MB_ICONINFORMATION
End If
.PutInFolder "($Alarms)", False
.Save True, True
End With
End Sub
Alles anzeigen
Das Dokument wird nach dem Speichern noch dem Ordner ($Alarms) hinzugefügt und dies ebenfalls gespeichert. Soweit ich bisher herausgefunden habe ist dies nötig, damit der Alarm auch tatsächlich funktioniert.
Wenn es hierfür eine elegantere Lösung gibt oder wenn ihr sonst noch Verbesserungsvorschläge habt, dann immer her damit!
Viele Grüße,
Oli