Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: niteshift am 06.02.04 - 22:42:42
-
Hallo zusammen.
Ich habe in Formularen Datumsfelder, wo man z.B. Deadlines erfasst. Ein Agent soll nun, wenn das Datum, welches erfasst wurd, dem Autor, welches das Form erfasst hat, eine Mail-Mitteilung senden, dass das Deadline erreicht ist und er nun z.B. eine Zahlung machen muss, oder was auch immer gewünscht wird.
Hat jemand schon so einen Agent eingerichtet?
Ich bin zwar mit dieser DB schon ziemlich weit gekommen, bin aber was Agents, Formeln und Scripts angeht, noch sehr unerfahren.
Vielen Dank für die Hilfe.
-
Hi,
das ist relativ einfach. Du brauchst einen getriggerten Agent, der einmal am Tag läuft, beisplielsweise um 5:00 Uhr. Der überprüft dann das Datum und sendet die Mails.
Ich hab so was ähnliches schon mal gemacht.
Der Agent könnte grob so aussehen:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim docMail As NotesDocument
Dim rtitem As NotesRichTextItem
Dim strSearch As String
On Error Goto ErrorHandler
Print "Agent ""CheckStatus"" wurde gestartet."
Set db = session.CurrentDatabase
'Suche alle Dokumente mit der Makse frmAufgabe und die im Feld FaelligAm das heutige Datum enthalten
strSearch = {@Contains(xForm; "frmAufgabe") & @Today = @Date(FaelligAm)}
Set collection = db.Search(strSearch, Nothing, 0)
' Messagebox Str(collection.count)
Print "Agent ""CheckStatus"" hat " & Str(collection.count) & " Dokument(e) zur Bearbeitung gefunden."
If ( collection.Count > 0 ) Then
Set docMail = New NotesDocument(db)
docMail.Form = "Memo"
docMail.SendTo = doc.User
docMail.Subject = "Überfällige Aufgabe(n)"
Set rtitem = New NotesRichTextItem(docMail, "Body")
Call rtitem.AppendText("Folgende Aufgabe(n) wurde(n) nicht bis zum Fälligkeitsdatum abgeschlossen:")
Call rtItem.AddNewLine(2, True)
Call rtitem.AppendDocLink(docTmp,"")
Call docMail.Send(False)
End If 'If ( collection.Count > 0 ) Then
Print "Agent ""CheckStatus"" wurde erfolgreich beendet."
Exit Sub
ErrorHandler:
Print "Agent ""CheckStatus"" wurde mit dem Fehler " & Cstr(Err) & " -> " & Error$(Err) & " beendet."
Exit Sub
End Sub
Axel
-
Ich würde die db.Search expression so machen:
strSearch = {@Contains(xForm; "frmAufgabe") & @Today <= @Date(FaelligAm) & fSchonBearbeitet!="1"}
und unten durch die Schleife der gefundenen Dokumente iterieren und für jedes Dokument doc.fSchonBearbeitet="1"
Das erhöht die Robustheit der Anwendung, wenn der Agent einen Tag mal nicht läuft.
-
... und dann das Ganze nicht mit NotesDatabase.Search machen, sondern dafür eine (versteckte) Ansicht bauen, die nur die Dokumente beinhaltet, die für den Agent in Frage kommen. Das geht flotter - und kann auch besser beobachtet werden.
HTH,
Bernhard
-
:) Ich danke Allen für die tolle Unterstützung. Werde den Agenten gleich mal aufbauen (sobald mein Notebook wieder richtig läuft - Homedrive ist weg) und dann berichten.
Gruss, Paul
-
@Axel_Janssen
So was habe ich bei mir eingebaut. Der Agent stammt aus einer ToDo-Datenbank, der an Cheffe ein Mail mit überfälligen ToDos schickt. Ich hab das nur rausgelöscht um den Code allgemeingültiger zu halten.
Diesen Zusatz darf man aber nur dann einbauen, wenn die Benachrichtigung nur einmal erfolgen soll.
@Bernhard
Wenn du das mit einer Ansicht machen willst, die nur die in Frage kommenden Dokumente beinhaltet, musst du @Today in die Select-Formel aufnehmen und wir alle sollte wissen, dass @Today und @Now nicht in eine Ansichtenformel gehören.
Axel