Hallo Leute,
habe schon viel gesucht und auch viel gelesen aber irgendwie nicht das richtige gefunden.
Also:
Habe einen Agenten geschrieben. Wenn man in der Maske "Eingabe" das Feld ErrinerungDatum füllt, dann soll an diesem Tag automatisch eine E-Mail an den Autor gesendet werden.
Bei der Dokumentenauswahl habe ich also alle Masken des Typs "Eingabe" eingetragen und folgenden Code zusammen gebastelt.
Sub Initialize
Dim uiws As New notesuiworkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim senddoc As NotesDocument
Dim rtItem As NotesRichTextItem
Dim strSubject As String
Dim strDocName As String
Dim strBody As Variant
Dim strEmpfaenger As String
Dim datum As Notesdatetime
Dim strDatum As String
Dim tmp As Variant
Set db = session.Currentdatabase
Set doc = uiws.Currentdocument.Document
Set senddoc = New NotesDocument(db)
Set datum= New notesdatetime (Today)
strDatum = Format(Day(datum.Dateonly),"00") & "." & Format(Month(datum.Dateonly),"00") & "." & Format(Year(datum.Dateonly),"0000")
tmp = doc.GetItemValue("ErinnerungDatum")
strDocName = doc.GetItemValue("Dokumentname")(0)
If tmp(0) = strdatum Then
Set rtitem = New NotesRichTextItem( senddoc, "Body" )
strEmpfaenger = doc.GetItemValue("Autor")(0)
With senddoc
.Form = "Memo"
.SendTo = doc.GetItemValue("Autor")(0)
.SendFrom = "Test@Test.de"
.Principal = "Test@Test.de"
.DisplaySent ="Test"
.Subject = "Automatische Erinnerung - " + strDocName
End With
strBody = "Autmatische Erinnerung! Folgen Sie dem Link um zum Dokument zu gelangen" & Chr(13) & Chr(13)
Call rtitem.AppendText(strBody)
Call rtItem.AppendDocLink(doc, doc.UniversalID)
'senden
Call senddoc.send(False)
End If
End Sub
Nur leider passiert nichts wenn ich den Agenten ausführe. Habe es auch mit Formelsprache probiert, allerdings weiß ich dort nicht, wie ich die Felder SendFrom, Principal usw. ausfüllen kann. Deshalb wollte ich es mit LS probieren aber irgendwie passiert halt gar nichts. Dabei ist zu sagen, dass der Code so in der Maske selber einbandfrei funktioniert, nur im Agenten irgendwie nicht. Kann es sein, dass ich das doc aders setzen muss?
Kann vll. jemand helfen???
Vielen Dank im voraus
soll einmal früh morgens gestartet werden
Wie soll er gestartet werden?
Ich denke mal periodisch enmal am Tag
Dann entferne aus dem Script alle UI-Objekte .
Den Datumsvergleich kannst Du auch einfacher machen:
If doc.GetItemValue("ErinnerungDatum")(0) >= Date Then
..
Dieser ganze Teil ist Unfug - Du kannst Du nicht einen String mit einem variant vom Typ Date/Time vergleichen!
Set datum= New notesdatetime (Today)
strDatum = Format(Day(datum.Dateonly),"00") & "." & Format(Month(datum.Dateonly),"00") & "." & Format(Year(datum.Dateonly),"0000")
tmp = doc.GetItemValue("ErinnerungDatum")
strDocName = doc.GetItemValue("Dokumentname")(0)
If tmp(0) = strdatum Then
Es reicht ein schlichtes
If doc.ErinnerungsDatum (0) = Today then ...
Und wie Dirk schon schrieb - UI-Klassen sind in einem scheduled Agent unzulässig.
Bernhard
mh, kann mir vll. nochmal jemand helfen bei der getDocumentByKey? kriege das nämlich irgendwie nicht hin.
Also hab jetzt mal einfach ne Ansicht erstellt in der alle Dokumente der Form "Eingang" drin sind und da gibt es eine Spalte in der die Nummern angezeigt werden. Nur weiß ich jetzt nicht wirklich, wie ich die Ansicht bei getDocumentByKey anwenden muss. Hier mal was, was ich ganz einfach mal probiert habe:
Dim dc As NotesDocumentCollection
Dim vw As NotesView
Dim arr(4) As Integer
Dim i As Integer
For i=0 To 4
arr(i)=i+1
Next
Set vw = db.GetView("vwNeueDokumente")
Set dc = vw.GetAllDocumentsByKey(arr)
Set doc = dc.GetFirstDocument
Print "Deklaration fertig"
Print "dc.Count = " & dc.Count
If dc.Count>0 Then
allerdings gibt dc.Count 0 zurück, findet also keine Dokumente. Hab bestimmt wieder irgendne dummen Fehler gemacht :D
Also, ich hoffe auf eure Hilfe.
Nochmals besten Dank für eure Mühe!
Habs schon gelöst ;D O0
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim senddoc As NotesDocument
Dim rtItem As NotesRichTextItem
Dim strSubject As String
Dim strDocName As String
Dim strBody As Variant
Dim strEmpfaenger As String
Set db = session.Currentdatabase
Set senddoc = New NotesDocument(db)
Dim dc As NotesDocumentCollection
Dim vw As NotesView
Set vw = db.GetView("vwNeueDokumente")
Dim vc As NotesViewEntryCollection
Dim entry As NotesViewEntry
Set vc = vw.AllEntries
Set entry = vc.GetFirstEntry()
While Not (entry Is Nothing)
Set doc = entry.Document
If doc.GetItemValue("ErinnerungDatum")(0) = Today Then
Set rtitem = New NotesRichTextItem( senddoc, "Body" )
strEmpfaenger = doc.GetItemValue("Autor")(0)
strDocname = doc.GetItemValue("Dokumentname")(0)
With senddoc
.Form = "Memo"
.SendTo = doc.GetItemValue("Autor")(0)
.SendFrom = "Test@Test.de"
.Principal = "Test@Test.de"
.DisplaySent ="Test"
.Subject = "AgentLS - Automatische Erinnerung - " + strDocName
End With
strBody = "Autmatische Erinnerung! Folgen Sie dem Link um zum Dokument zu gelangen" & Chr(13) & Chr(13)
Call rtitem.AppendText(strBody)
Call rtItem.AppendDocLink(doc, doc.UniversalID)
Call senddoc.send(False)
End If
Set entry = vc.GetNextEntry(entry)
Wend
End Sub
Allerdings startet mein Agent noch nicht so wie gewünscht, aber immerhin macht er jetzt was wenn ich ihn ausführe und sogar das, was er soll O0
Nur, wenn ich ihn periodisch einstelle, dann startet er den Agenten nicht.
Hier mal meine Einstellungen:
Auslösen: durch Zeitplan
Zeitplan: täglich
Agent startet um: 13:45 Uhr