Das Notes Forum
Domino 9 und frühere Versionen => ND6: Administration & Userprobleme => Thema gestartet von: Dadum am 26.02.08 - 15:52:47
-
Hallo zusammen
ich habe einen agenten geschrieben, der eine komplette datenbank der dokumente nach bedingungen absucht, und mir bei einem treffer eine email generiert.
da der agent täglich läuft und ich so mit email überschüttet werden, möchte ich wissen, ob es da nicht eine lösung gibt, damit ich nur pro dokument alle 30 tage eine email bekomme...
vllt weiß jemand rat...
Danke
Gruß
-
Du kannst im Zeitplan des Agenten einstellen, dass er nur einmal im Monat läuft.
Axel
-
Hallo
Danke für die Antwort, aber ich glaube ich habe meine frage nicht ganz so genau gestellt
Ich habe in der Datenbank viele Dokumente, diese haben alle ein unterschiedliches Datum (z.B. wann sie ablaufen...)
Wenn ich nun den Agenten nur einmal im Monat laufen lasse, dann könnte es sein, der ich so nicht rechtzeitig gewarnt werde
Gruß Michi
-
Heißt das, dass du pro Agentenausführung nur ein Mail bekommen willst, auch wenn z.B. 10 Dokumente abgelaufen sind?
Axel
-
Ich denke mal, dass sich der Agent jeden Tag die Dokumente schnappt, die in ein gewisses Zeitfenster fallen und dann das Mail/die Mails verschickt. Das macht er natürlich jeden Tag, bis dass die Bedingung nicht mehr erfüllt ist.
Also: Flag setzen, dass für dieses Doc schon ein Mail verschickt worden ist.
-
Heißt das, dass du pro Agentenausführung nur ein Mail bekommen willst, auch wenn z.B. 10 Dokumente abgelaufen sind?
Nein
Ich versuche es anhand eines Beispiels zu erklären:
Ich habe in die Datenbank 2 Dokumente (es geht um Verträge) eingetragen
Dokument 1: Der früheste Kündigungstermin ist der 25.04.08
Dokument 2: Der früheste Kündigungstermin ist der 25.03.08
Der Agent läuft nun jeden Tag, er soll mir nun eine Email generieren, wenn das Datum des frühesten Kündigungstermins sich in folgendem Zeitraum befindet:
Heute + 90 Tage
Da der Agent aber jeden Tag läuft, so wird er mir bei dem Beispiel jeden Tag 2 Emails schreiben.
Jetzt ist meine Frage, ob ich im Agenten nicht definieren kann, das er mir nicht jeden Tag eine Email schreibt, sondern nur alle 30 Tage
Er muss vom Datum des frühesten Kündigungsdatum ausgehen
frühester Kündigungstermin +30 Tage = Email
frühester Kündigungstermin + 35 Tage = keine Email
frühester Kündigungstermin + 60 Tage = Email
Gruß Michi
Also: Flag setzen, dass für dieses Doc schon ein Mail verschickt worden ist.
Wie setze ich das?
-
Verstecktes Feld einbauen und befüllen.
-
Verstecktes Feld einbauen und befüllen.
okay, das werde ich machen
Gruß Michi
-
Verstecktes Feld einbauen und befüllen.
Hallo,
mich würde inetressieren womit ich das befüllen muss?
Geuß
-
Mit irgendeinem Kennzeichen, dass der Agent beachtet bei seiner Auswahl, um die schon abgearbeiteten Dokumente auszuschließen.
-
Hallo... mein Agent sollte nun mit folgender Logik befüllt werden siehe Bild), ich weiß wo ich das einfügen muss, aber nicht wie ich dies bewerkstelligen soll...
Sub Initialize
Dim s As notessession
Dim db As notesdatabase
Dim view As notesview
Dim doc, memo, ProfileDoc As notesdocument
Dim Item As NotesItem
Dim body As notesrichtextitem
Dim dtthen As notesdatetime, dtnow As notesdatetime
Dim dateTime As New NotesDateTime( "Today" )
Dim dateTime_ As Variant
Dim maxdiff, difference As Long
Set s = New notessession
Set db=s.currentdatabase
' Profildokument
Set ProfileDoc = db.GetProfileDocument("PRFdoc_defaultVertrag")
Set Item = ProfileDoc.getfirstitem("prfdoc_default_warnen")
maxdiff =item.values(0)
' Einzelne Vertragsdokumente werden geprüft
Set view = db.getview("($AllDocID)")
Set doc = view.getfirstdocument
' Schleife
Do While Not (doc Is Nothing)
Set dtthen = doc.getfirstitem("ver_fruehesterkuentermin").DateTimeValue
If Not (dtthen Is Nothing) Then
HIER SOLLTE DIE LOGIK REIN
Call dtthen.setAnyTime
Set dtnow= New notesdatetime("Today")
Call dtnow.setAnyTime
' Differenzberechnung - Liefert einen negativen Wert zurück(?), deswegen wird am Ende mit -1 multipliziert
difference = dtnow.TimeDifference(dtthen) / 86400 *(-1)
' Bedingung
If ( (difference > 0) And (difference <= maxdiff)) Then
Set memo = db.createdocument
With memo
Call .replaceitemvalue("Form", "Memo")
Call .replaceitemvalue("Subject","Auslaufender Vertrag - " & doc.ver_firma(0))
Set body = .createrichtextitem("Body")
With body
Call .appendtext("Der "& doc.ver_art(0) &" für "& doc.ver_gegenstand(0) &" läuft demnächst aus. Hier ist das Dokument: ")
Call .appenddoclink(doc,"Bitte hier klicken","")
End With
Call .send(False, ProfileDoc.GetFirstItem("prfdoc_default_email"))
End With
End If
End If
Set doc = view.getnextdocument(doc)
Loop
End Sub
-
Hm... Das ganze lässt sich doch noch einfacher bewerkstelligen. Warum fragst du an der Stelle, wo du die Differenz prüfst, nicht auf Gleichheit ab? Dann fällt ein Dokument nur genau einmal in dein Schema und du brauchst auch kein Flag setzen, das du zusätzlich überprüfen musst. Ein Nachteil könnte hier aber sein, dass du die Nachricht nicht bekommst, wenn für Dokumente an einem Stichtag der Agent nicht läuft.
-
Mal eine Frage: hast Du keinen Ausbilder, etc ?
Wenn der Agent wirklich von dir stammt, dann müsstest du den Rest aber auch alleine
hinbekommen.
-
Dim doc, memo, ProfileDoc As notesdocument
Mal nur als kleiner Hinweis: Obenstehender Code ist gleichbedeutend mit
Dim doc As Variant
Dim memo As Variant
Dim ProfileDoc As NotesDocument
So schreibt man "Gruselcode" ...
Bernhard