Das hatten wir vorhin gerade .. E-Mail Alarmbenachritigungungen funktionieren nur bei Datenbanken die im Client geöffnet sind .. weil der Client die Benachrichtigung prüft und ggf Email versendet ..
Es gibt aber einen kleinen Workarround .. den muss ich mal herraussuchen ..
KAI
edit: gefunden!
Also hier der Code (ein Agent, der mehrmals am Tag läuft) .. Error-handling fehlt (gibt genug threads in denen ein geeignetes errorhandling steht) noch und den Code hab ich mir seit Jahren nicht mehr angeschaut .. aber funktionieren sollte er ..
Sub Initialize
On Error Goto errhandle
Dim s As New NotesSession
Dim db As NotesDatabase ' beliebige Mail-In DB
Dim userdb As NotesDatabase ' User Mailfile
Dim view As NotesView ' ($Alarm) Ordner
Dim doc As NotesDocument ' Alarm - Dokument (Termin, Meeting, Erinnerung etc. mit Erinnerungs-Option)
Dim userdoc As NotesDocument ' syncrones Alarm - Dokument beim User
Dim agent As NotesAgent ' Ich
Dim lasttime As Variant ' das letzte mal als ich lief
Dim reg As New NotesRegistration ' Domino Directory Information
Dim anames As Variant ' Liste aller die alarmiert/erinnert werden sollen
Dim acl As NotesACL
Set agent = s.CurrentAgent
Set db = s.CurrentDatabase
' der Agend soll nur zentral auf dem Adminserver arbeiten; sonst könnte es zu doppelten Einträgen kommen
'If Not agent.ServerName = db.ACL.AdministrationServer Then Exit Sub
' Unter ($Alarms) befinden sich alle Alarme, sowohl die mit Sound- als auch eMail-Benachrichtigung
Set view = db.GetView( "($Alarms)" )
Set doc = view.GetFirstDocument
' reg as NotesRegistration dient zum herrausfinden der Usermailfiles hier wir der Notes Domain Controler festgelegt in dem der User geprüft wird
reg.RegistrationServer = db.ACL.AdministrationServer
lasttime = agent.LastRun
While Not(doc Is Nothing)
'Nur Dokumente die seit dem letzen Agentlauf geändert/erstellt wurden müssen bearbeitet werden
If lasttime < doc.LastModified Then
'AlarmSendTo speziefiziert den Empfänger ein Alarm Email / Erinnerung
anames = doc.GetItemValue("$AlarmSendTo")
Forall x In anames
' get UserInfo erwarten bei x einen FQN und gibt über die Konstanten mailserver$, mailfile$ Server und Mailfile der Person X zurück
Call reg.GetUserInfo(x, mailserver$, mailfile$)
Set userdb = New NotesDatabase(mailserver$, mailfile$)
If Not userdb.IsOpen Then Call userdb.Open("","")
'Es wird versucht einen syncronisierten Alarm zu suchen, wenn das nicht gelingt wird zu IngnoreNonexistentUNID gesprungen
Set userdoc = userdb.GetDocumentByUNID(doc.UniversalID)
continue:
'Die zentrale Mail-In Datenbank ist Master dieser Alarme deswegen wird nur gepush (überschrieben)
Call doc.CopyAllItems(userdoc,True)
' der Alarm Deamon der Usr würde an alle Personen in $AlarmSendTo Mail versenden dies würde schon durch diesen Agenten erledigt.
' dewegen wird das feld gelöscht
Call userdoc.ReplaceItemValue("$AlarmSendTo",x)
Call userdoc.Save(True, False)
userdoc.PutInFolder("($Alarms)")
End Forall
End If
'nächster Alarm
Set doc = view.GetNextDocument(doc)
Wend
Exit Sub
'~~~ Catch da Bug ~~~~~
errhandle:
Select Case Err
Case 1001 :
Print “Error” & Error$
Exit Sub
Case 4091 : 'Error = ERR_NOTES_BAD_UNID
' hierher wird gesprungen wenn kein syncronisierter Alarm gefunden werden konnte
' es muss ein neues synconisiertes (gleiche UNID) Dokument angelegt werden
Set userdoc = userdb.CreateDocument()
userdoc.UniversalID = doc.UniversalID
Resume continue
Case Else
Print “Error” & Str(Err) & “ in Line " & Str(Erl) & “ : " & Error$
Exit Sub
End Select
End Sub
edit2: das funktioniert bei uns .. aber den Agent einzusetzten empfehle ich nur dann wenn man genau weiß was jede zeile bedeutet und tut ..