Domino 9 und frühere Versionen > ND7: Entwicklung
Per VBA Meeting in Notes Kalender eintragen und Einladungen senden
etofi:
Hallo zusammen,
ich bin am verzweifeln. Ich möhte per VBA eine Meeting im Notes Kalender anlegen.
Das geht auch ganz gut, nur die Funktion "Status der eingeladenen Personen anzeigen" geht nicht.
Es kommt immer die Fehlermeldung "Object variable not set".
Anbei mein Code
--- Code: ---Public Function SendNotesTermin(pstrSubject As String, _
pstrRecipient As String, _
pstrMailBody As String, _
AppDate As Date, _
StartTime As Date, _
MinsDuration As Integer, _
pstrLocation As String, _
pstrCategories As String, _
AppointmentType As String) As String
'Aufgabe: Sendet Termine mit Attachment via Notes
'Rückgabe: String mit Fehlermeldung bei auftretendem Fehler, sonst Leerstring
'
'WICHTIG: Bei den Empfängern darf der Absender nicht enthalten sein!!
On Error GoTo proc_error
Dim objMaildb As Object
Dim objCalenDoc As Object
Dim strMailDbName As String
Dim strUserName As String
Dim strServerName As String
Dim varEmpfListe() As Variant
Dim datStartDatum As Date
Dim datStartZeit As Date
Dim datEndDatum As Date
Dim datEndZeit As Date
SendNotesTermin = ""
'Zeitvariablen füllem
datStartDatum = DateSerial(Year(AppDate), Month(AppDate), Day(AppDate))
datStartZeit = TimeSerial(Hour(StartTime), Minute(StartTime), Second(StartTime))
datEndDatum = DateSerial(Year(DateAdd("n", MinsDuration, AppDate)), Month(DateAdd("n", MinsDuration, AppDate)), Day(DateAdd("n", MinsDuration, AppDate)))
datEndZeit = TimeSerial(Hour(DateAdd("n", MinsDuration, StartTime)), Minute(DateAdd("n", MinsDuration, StartTime)), Second(DateAdd("n", MinsDuration, StartTime)))
'Empfänger, per Komma getrennt, in Empfängerarray eingelesen
intEmpfCnt = 0
lngPos1 = InStr(1, pstrRecipient, ",")
While lngPos1 > 0
ReDim Preserve varEmpfListe(intEmpfCnt)
varEmpfListe(intEmpfCnt) = Left(pstrRecipient, lngPos1 - 1)
pstrRecipient = Right(pstrRecipient, Len(pstrRecipient) - lngPos1)
lngPos1 = InStr(1, pstrRecipient, ",")
intEmpfCnt = intEmpfCnt + 1
Wend
ReDim Preserve varEmpfListe(intEmpfCnt)
varEmpfListe(intEmpfCnt) = pstrRecipient
'Notes befüllen
Set objSession = CreateObject("Notes.NotesSession")
strUserName = objSession.UserName
strServerName = objSession.GETENVIRONMENTSTRING("MailServer", True)
strMailDbName = objSession.GETENVIRONMENTSTRING("MailFile", True)
Set objMaildb = objSession.GETDATABASE(strServerName, strMailDbName)
If objMaildb.ISOPEN <> True Then
On Error Resume Next
objMaildb.OPENMAIL
End If
Set objCalenDoc = objMaildb.CREATEDOCUMENT
With objCalenDoc
.REPLACEITEMVALUE "Form", "Appointment"
.REPLACEITEMVALUE "AppointmentType", AppointmentType '0=Appointment, 1=Anniversary, 2=AllDayEvent, 3=Meeting, 4=Reminder
'Zeit und Datum
.REPLACEITEMVALUE "StartDateTime", CDate(datStartDatum & " " & datStartZeit)
.REPLACEITEMVALUE "CalendarDateTime", CDate(datStartDatum & " " & datStartZeit)
.REPLACEITEMVALUE "EndDateTime", CDate(datEndDatum & " " & datEndZeit)
.REPLACEITEMVALUE "StartDate", datStartDatum
.REPLACEITEMVALUE "StartTime", datStartZeit
.REPLACEITEMVALUE "EndDate", datEndDatum
.REPLACEITEMVALUE "EndTime", datEndZeit
.REPLACEITEMVALUE "$NoPurge", datEndDatum & " " & datEndZeit
'Eigentümer
.REPLACEITEMVALUE "Chair", strUserName
.REPLACEITEMVALUE "AltChair", strUserName
.REPLACEITEMVALUE "From", strUserName
.REPLACEITEMVALUE "Principal", strUserName
.REPLACEITEMVALUE "$AltPrincipal", strUserName
'Was, wo und warum
.REPLACEITEMVALUE "Categories", pstrCategories
.REPLACEITEMVALUE "Location", pstrLocation
.REPLACEITEMVALUE "Subject", pstrSubject
.REPLACEITEMVALUE "Body", pstrMailBody
' Einstellung einer Erinnerung in Minuten
.REPLACEITEMVALUE "$Alarm", 1
.REPLACEITEMVALUE "$AlarmOffset", -15
.REPLACEITEMVALUE "Alarms", "1"
'Welches Icon soll angezeigt werden
Select Case AppointmentType
Case 0 'Appointment
.REPLACEITEMVALUE "_viewicon", 160
Case 1 'Anniversary
.REPLACEITEMVALUE "_viewicon", 63
Case 2 'AllDayEvent
.REPLACEITEMVALUE "_viewicon", 9
Case 3 'Meeting
.REPLACEITEMVALUE "_viewicon", 158
Case 4 'Reminder
.REPLACEITEMVALUE "_viewicon", 10
End Select
'Notes Systemvariablen
.REPLACEITEMVALUE "$BorderColor", "D2DCDC"
.REPLACEITEMVALUE "$BusyName", strUserName
.REPLACEITEMVALUE "$BusyPriority", "1"
Dim strCSTrack(2) As String
Dim strUserFuerCSTrack As String
strUserFuerCSTrack = Replace(strUserName, "CN=", "")
strUserFuerCSTrack = Replace(strUserFuerCSTrack, "OU=", "")
strUserFuerCSTrack = Replace(strUserFuerCSTrack, "O=", "")
strCSTrack(0) = "Send Request by Notes Client on " & strUserFuerCSTrack & "(" & objSession.NOTESVERSION & ") at " & Format(Now(), "dd.mm.yyyy hh:mm:ss")
strCSTrack(1) = "Prepare Request by Notes Client on " & strUserFuerCSTrack & "(" & objSession.NOTESVERSION & ") at " & Format(Now(), "dd.mm.yyyy hh:mm:ss")
strCSTrack(2) = "Revert Invitation by Notes Client on " & strUserFuerCSTrack & "(" & objSession.NOTESVERSION & ") at " & Format(Now(), "dd.mm.yyyy hh:mm:ss")
.REPLACEITEMVALUE "$CSTrack", strCSTrack
.REPLACEITEMVALUE "$CSVersion", "2"
.REPLACEITEMVALUE "$CSWISL", Array("$S:1", "$L:1", "$B:1", "$R:1", "$E:1", "$W:1", "$O:1", "$M:1")
.REPLACEITEMVALUE "$ExpandGroups", "3"
.REPLACEITEMVALUE "$FromPreferredLanguage", "de"
.REPLACEITEMVALUE "$HFFlags", "1"
.REPLACEITEMVALUE "$LangChair", ""
.REPLACEITEMVALUE "$SMTPKeepNotesItem", "1"
.REPLACEITEMVALUE "$WatchedItems", Array("$S", "$L", "$B", "$R", "$E", "$W", "$O", "$M")
.REPLACEITEMVALUE "ApptUNID", .UNIVERSALID
.REPLACEITEMVALUE "BookFreeTime", ""
.REPLACEITEMVALUE "ExcludeFromView", Array("S", "D")
.REPLACEITEMVALUE "MailOptions", "0"
.REPLACEITEMVALUE "MeetingType", "1"
.REPLACEITEMVALUE "OrgTable", "C0"
.REPLACEITEMVALUE "PublicAccess", "1"
.REPLACEITEMVALUE "Resources", ""
.REPLACEITEMVALUE "Repeats", ""
.REPLACEITEMVALUE "RoomToReserve", ""
.REPLACEITEMVALUE "SchedulerSwitcher", "1"
.REPLACEITEMVALUE "StartTimeZone", "Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=86$ZN=W. Europe"
.REPLACEITEMVALUE "StorageRequiredNames", "1"
.REPLACEITEMVALUE "UpdateSeq", 1
.REPLACEITEMVALUE "WebDateTimeInit", "1"
'Versandeinstellungen
If AppointmentType = 3 Then 'Meeting
.REPLACEITEMVALUE "Recipients", varEmpfListe
.REPLACEITEMVALUE "RequiredAttendees", varEmpfListe
.REPLACEITEMVALUE "AltRequiredNames", varEmpfListe
.REPLACEITEMVALUE "SendTo", varEmpfListe
End If
'.DeliveryReport = "B" 'Übermittlung anzeigen
'.Importance = "2" 'Wichtigkeit hochsetzen
.SAVEMESSAGEONSEND = False ' bei True wird ein Exemplar in Notes in Gesendet gestellt
.SIGNONSEND = True 'Signieren beim Versand
'.ReturnReceipt = "1" 'Empfang bestätigen
'Überprüfen vor dem Speichern bzw. Versand
If .COMPUTEWITHFORM(True, False) Then
MsgBox "Bei der Erstellung des Termins ist ein Fehler aufgetreten!"
GoTo proc_exit
End If
'Wenn es ein Metting ist, Einladungen versenden
If AppointmentType = 3 Then
.SEND 0
End If
'Im Kalender speichern
.Save 1, 0
'Damit der Alarm auch funtioniert
.PUTINFOLDER "$Alarms", True
End With
proc_exit:
Set objMaildb = Nothing
Set objCalenDoc = Nothing
Exit Function
proc_error:
SendNotesTermin = Err.Description
Resume proc_exit
End Function
--- Ende Code ---
Welche Variable habe ich vergessen? Bin wirklich ratlos...
Grüße
Eric Trösch
Peter Klett:
Erstelle Dir ein Dokument, wie Du es haben möchtest, manuell. Vergleiche dann über die Felderliste das manuell erstellte Dokument mit dem maschinell erstellten. Wenn ein Feld fehlt, wirst Du es so am einfachsten finden.
m3:
IBM Lotus Notes and Domino Calendaring & Scheduling Schema
etofi:
--- Zitat von: Peter Klett am 18.02.11 - 17:27:20 ---Erstelle Dir ein Dokument, wie Du es haben möchtest, manuell. Vergleiche dann über die Felderliste das manuell erstellte Dokument mit dem maschinell erstellten. Wenn ein Feld fehlt, wirst Du es so am einfachsten finden.
--- Ende Zitat ---
Das habe ich bereits gemacht. Es sind mittlerweile alle Felder drin aber die Fehlermeldung bleibt.
3 Felder haben den "Feld-Flags: SUMMARY" statt "Feld-Flags: SUMMARY NAMES". Ist das tragisch?
Die einzige Variable die ich nicht habe ist die "$MessageID". Ich kann die zwar anlegen, weiß aber nicht woher ich diese ID nehmen soll. Die sieht z.B. so aus "<OF0ADEED9D.4A673CE7-ONC125783E.0049860D-C125783E.00498C03@LocalDomain>"
--- Zitat von: m3 am 18.02.11 - 18:46:52 ---IBM Lotus Notes and Domino Calendaring & Scheduling Schema
--- Ende Zitat ---
Leider habe ich hier auch nichts zu meinem Problem gefunden.
Irgendwie komme ich nicht weiter...
Es muß doch eine Lösung dafür geben.
etofi:
So jetzt läufts. Es lag nicht an fehlenden Variablen sondern daran:
--- Code: --- 'Überprüfen vor dem Speichern bzw. Versand
If .COMPUTEWITHFORM(True, False) Then
MsgBox "Bei der Erstellung des Termins ist ein Fehler aufgetreten!"
GoTo proc_exit
End If
--- Ende Code ---
Wenn man das weglässt funktioniert es einwandfrei.
Anbei der neue Code, falls es mal jemand braucht.
--- Code: ---Public Function SendNotesTermin(pstrSubject As String, _
pstrRecipient As String, _
pstrMailBody As String, _
AppDate As Date, _
StartTime As Date, _
MinsDuration As Integer, _
pstrLocation As String, _
pstrCategories As String, _
AppointmentType As String) As String
'Aufgabe: Sendet Termine via Notes
'Rückgabe: String mit Fehlermeldung bei auftretendem Fehler, sonst Leerstring
'
'pstrSubject: Betreff
'pstrRecipient: Empfänger mit Komma getrennt
'pstrMailBody: Text
'AppDate: Datum Termin
'StartTime: Uhrzeit Termin
'MinsDuration: Dauer in Minuten
'pstrLocation: Ort
'pstrCategories: Kategorie
'AppointmentType: 0=Termin, 1=Jahrestag, 2=Ganztägige Veranstaltung, 3=Meeting, 4=Erinnerung
'
'WICHTIG: Damit die Funktion "Status der eingeladenen Personen prüfen" sauber funktioniert
' müssen die internen Aderssen im Notes Format "User/Intern/MUSTER" übergeben werden.
On Error GoTo proc_error
Dim objNotesSession As Object
Dim objNotesDatabase As Object
Dim objNotesDocument As Object
Dim strServerName As String
Dim strMailDbName As String
Dim strUserName As String
Dim strUserMail As String
Dim datStart As Date
Dim datEnde As Date
Dim intIconNr As Integer
Dim intZaehler As Integer
Dim dblAnzahlTage As Double
SendNotesTermin = ""
'Bei ganztägige Veranstaltung auf 4 Uhr Starttag und 22 Uhr Endtage setzen
If AppointmentType = 2 Then
datStart = CDate(AppDate & " " & "04:00")
dblAnzahlTage = fktAufrunden(MinsDuration / 60 / 24, 0) ' Berechnung Tage
datEnde = CDate(Format(DateAdd("d", dblAnzahlTage - 1, datStart), "dd.mm.yyyy") & " 22:00")
Else
datStart = CDate(AppDate & " " & Format(StartTime, "hh:mm"))
datEnde = DateAdd("n", MinsDuration, datStart)
End If
Set objNotesSession = CreateObject("Notes.NotesSession")
strUserName = objNotesSession.UserName
strUserMail = Replace(Replace(Replace(strUserName, "CN=", ""), "OU=", ""), "O=", "")
strServerName = objNotesSession.GETENVIRONMENTSTRING("MailServer", True)
strMailDbName = objNotesSession.GETENVIRONMENTSTRING("MailFile", True)
Set objNotesDatabase = objNotesSession.GETDATABASE(strServerName, strMailDbName)
Set objNotesDocument = objNotesDatabase.CREATEDOCUMENT
With objNotesDocument
'## Appointment Type - Meeting
.REPLACEITEMVALUE "AppointmentType", AppointmentType
'## General Meeting Info
.REPLACEITEMVALUE "Form", "Appointment"
.REPLACEITEMVALUE "Subject", pstrSubject
.REPLACEITEMVALUE "Categories", pstrCategories
.REPLACEITEMVALUE "Body", pstrMailBody
.REPLACEITEMVALUE "Location", pstrLocation
.REPLACEITEMVALUE "Room", ""
'## Who sent/created/chairs the Meeting
.REPLACEITEMVALUE "From", objNotesSession.UserName
.REPLACEITEMVALUE "Chair", objNotesSession.UserName
'## Time of meeting-related stuff
.REPLACEITEMVALUE "STARTDATETIME", datStart
.REPLACEITEMVALUE "StartTime", datStart
.REPLACEITEMVALUE "StartDate", datStart
.REPLACEITEMVALUE "EndDateTime", datEnde
.REPLACEITEMVALUE "EndTime", datEnde
.REPLACEITEMVALUE "EndDate", datEnde
If AppointmentType = 2 Then 'Bei ganztägige Veranstaltung Je Tag Ein Arrayeintag erforderlich
Dim arrCalenderDateTime() As Date
ReDim arrCalenderDateTime(dblAnzahlTage - 1)
For intZaehler = 0 To dblAnzahlTage - 1
arrCalenderDateTime(intZaehler) = DateAdd("d", intZaehler, datStart)
Next
.REPLACEITEMVALUE "CalendarDateTime", arrCalenderDateTime
Else
.REPLACEITEMVALUE "CalendarDateTime", datStart
End If
'## Attendee-related data
If AppointmentType = 3 Then 'Meeting
Dim arrRequiredAttendeeName() As String
arrRequiredAttendeeName = Split(pstrRecipient, ",")
For intZaehler = 0 To UBound(arrRequiredAttendeeName)
'Bei den Empfängern darf der Absender nicht enthalten sein!!
If Trim(arrRequiredAttendeeName(intZaehler)) = strUserMail Then
arrRequiredAttendeeName(intZaehler) = vbNullString
Else
arrRequiredAttendeeName(intZaehler) = Trim(arrRequiredAttendeeName(intZaehler))
End If
Next
.APPENDITEMVALUE "RequiredAttendees", arrRequiredAttendeeName
.APPENDITEMVALUE "AltRequiredNames", arrRequiredAttendeeName
'Call objNotesDocument.AppendItemValue("INetRequiredNames", arrRequiredAttendeeNameAndEmail)
'Call objNotesDocument.REPLACEITEMVALUE("StorageRequiredNames", ".")
.APPENDITEMVALUE "SendTo", arrRequiredAttendeeName
'Call objNotesDocument.APPENDITEMVALUE("NoticeType", "I")
End If
'## System variables
.REPLACEITEMVALUE "$UpdatedBy", objNotesSession.UserName
.REPLACEITEMVALUE "OrgTable", "C0"
.REPLACEITEMVALUE "Principal", objNotesSession.UserName
.REPLACEITEMVALUE "$Alarm", 1
.REPLACEITEMVALUE "$AlarmOffset", -15
.REPLACEITEMVALUE "Alarms", "1"
Select Case AppointmentType
Case 0 'Appointment
intIconNr = 160
Case 1 'Anniversary
intIconNr = 63
Case 2 'AllDayEvent
intIconNr = 9
Case 3 'Meeting
intIconNr = 158
Case 4 'Reminder
intIconNr = 10
End Select
.REPLACEITEMVALUE "_ViewIcon", intIconNr
If AppointmentType = 3 Then .SEND False 'Wenn Meeting dann Einladungen senden
.Save True, False
'Damit der Alarm auch funtioniert
.PUTINFOLDER "$Alarms", True
End With
proc_exit:
Set objNotesDocument = Nothing
Set objNotesDatabase = Nothing
Set objNotesSession = Nothing
Exit Function
proc_error:
SendNotesTermin = Err.Description
Resume proc_exit
End Function
Public Function fktAufrunden(Zahl As Double, Stellen As Integer) As Double
If IsNull(Zahl) = True Then
fktAufrunden = 0
Else
Zahl = CDec(Zahl)
If ((Zahl - Int(Zahl)) * 10 ^ Stellen) = 0 Then
fktAufrunden = Int(Zahl) + (Int(((Zahl - Int(Zahl)) * 10 ^ Stellen)) / 10 ^ Stellen)
Else
fktAufrunden = Int(Zahl) + (Int(((Zahl - Int(Zahl)) * 10 ^ Stellen) + 1) / 10 ^ Stellen)
End If
End If
End Function
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln