Autor Thema: Wiedervorlage per Agent  (Gelesen 4984 mal)

Offline manboo8000

  • Junior Mitglied
  • **
  • Beiträge: 61
Wiedervorlage per Agent
« am: 04.10.15 - 14:23:26 »
Hey, ich habe da eine Datenbank mit zahlreichen Dokumenten. Das Dokument enthält auch ein Feld "Wiedervorlagedatum" und auf der Datenbank läuft ein einfacher Agent, der das Feld Wiedervorlagedatum mit dem Tagesdatum vergleicht und sobald dieses identisch ist, eine Mailbenachrichtigung an eine zentrale Stelle auslöst.
Ich würde das gerne anders gestalten und zwar stelle ich mir bspw. vor, dass am 01. eines Monats der Agent läuft und dann in einer Mail die Dokumente anlistet, die in diesem Monat zur Wiedervorlage anstehen. Machbar ist dies sicherlich, aber vermutlich nicht mit Formeln, oder?

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #1 am: 04.10.15 - 14:53:26 »
Jau, das ist eher was für Lotus Script.

Such mal hier im Forum, da finden sich Codebeispiele, auf deren Basis Du das dann bauen kannst. Oder in den Templates von IBM, da sind genug Vorlagen enthalten.

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #2 am: 04.10.15 - 15:23:50 »
In der Designerhilfe ist auch was nettes, unter "NotesNewsletter".
Das erste Beispiel müsste man nur in 3 Zeilen anpassen (die Search, Subject und die Send Zeile), evtl. würde dies für Deine Zwecke schon langen.
Andy

Offline manboo8000

  • Junior Mitglied
  • **
  • Beiträge: 61
Re: Wiedervorlage per Agent
« Antwort #3 am: 27.10.15 - 16:39:28 »
das mit dem NotesNewsletter klingt gut.

Wie kriege ich es denn in Lotus Script hin, dass der Agent bspw. am 01. eines Monats läuft und dann die Dokumente sucht, bei denen die "Wiedervorlage" im aktuellen Monat liegt?

Danke

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #4 am: 27.10.15 - 16:52:02 »
1 (a): Zu Beginn des Agents fragst Du als erstes das aktuelle Datum ab und beendest den Agent, wenn das nicht der 1. des Monats ist
   (b): Du stellst sicher, dass der Agent auch an einem späteren Tag läuft, wenn der Agent am 1. des Monats "verhindert" war
         (Speicherung des letzten erfolgreichen Agentlaufs)
    (c) Du stellst sicher, dass der Agent nicht "aus Versehen" am 1. ein zweites Mal laufen kann (siehe 1 (b))

2: Beispielsweise mit einem NotesDatabase.Search (Formelvergleich von Monat und Jahr des Werts des Wiedervorlage-Items).

HTH,
Bernhard

Offline manboo8000

  • Junior Mitglied
  • **
  • Beiträge: 61
Re: Wiedervorlage per Agent
« Antwort #5 am: 29.10.15 - 14:06:17 »
1 (a): Zu Beginn des Agents fragst Du als erstes das aktuelle Datum ab und beendest den Agent, wenn das nicht der 1. des Monats ist
   (b): Du stellst sicher, dass der Agent auch an einem späteren Tag läuft, wenn der Agent am 1. des Monats "verhindert" war
         (Speicherung des letzten erfolgreichen Agentlaufs)
    (c) Du stellst sicher, dass der Agent nicht "aus Versehen" am 1. ein zweites Mal laufen kann (siehe 1 (b))

2: Beispielsweise mit einem NotesDatabase.Search (Formelvergleich von Monat und Jahr des Werts des Wiedervorlage-Items).

HTH,
Bernhard

also das unter 1 jetzt mal außen vor gelassen. Da ich leider noch nie ein Lotus-Script-Seminar hatte, stehe ich da leider etwas auf dem Schlauch. Vielleicht könnt ihr mir dabei helfen. Mein Code (fehlerhaft) sieht jetzt so aus:

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim newsletter As NotesNewsLetter
   Dim doc As NotesDocument
   Dim Wiedervorlage As NotesDateTime
   Set MonthWV = Month(Wiedervorlage)
   Set YearWV = Year (Wiedervorlage)
   Dim profiledoc As NotesDocument
   Set profiledoc = db.GetProfileDocument("Konfiguration")
   Set db = session.CurrentDatabase
   Set collection = db.Search (MonthWV=Month(Today) & YearWV=Year(@Today))
   If ( collection.Count > 0 ) Then
      Set newsletter = New NotesNewsLetter( collection )
      Set doc = newsletter.FormatMsgWithDoclinks( db )
      doc.Form = "Memo"
      doc.Subject = "Wiedervorlage Fortbildung(en)"
      Call doc.Send( False, profiledoc )
   End If
End Sub

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #6 am: 29.10.15 - 14:44:39 »
Hallo,

die Variable Wiedervorlage ist bei Dir leer.

Bau Dir eine Fehlerroutine ein (Beispiele gibt es hier im Forum, such mal nach "on Error").

Dann benötigt Du eine vernünftige Reihenfolge. Erst DB zuweisen, dann ein Profildocument.

Eine Mail sollte auch einen Absender haben (Feld From). Noch wichtiger ist aber der Empfänger im SendTo-Feld....

Bei kurzem Blick aufgefallen, für mehr reicht die Zeit gerade nicht.

CU,
Axel

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #7 am: 29.10.15 - 15:09:22 »
Ich habe mal alles zusammengestrichen, was in der aktuellen Version benutzt wird und nicht funktioniert, oder noch gar nicht genutzt wird.
Dann solltest du schon mal eine erste Testversion haben, fehlt natürlich noch einiges u. a. die Fehlerbehandlung.
Es geht hier nur mal darum, das Du  einen speicherbaren und testbaren Code hast, dann bekommst Du schneller ein Gefühl dafür.

Code
	Dim session As NotesSession
	Dim db As NotesDatabase
	Dim dc As NotesDocumentCollection
	Dim newsletter As NotesNewsLetter
	Dim doc As NotesDocument
	Dim Wiedervorlage As NotesDateTime
	Dim search As String
	
	Set session = New NotesSession
	Set db = session.CurrentDatabase
	
	Set Wiedervorlage = New NotesDateTime(Now)
	Call Wiedervorlage.Adjustmonth(-1)
	
	search = {Form = "NameDerForm" & REMINDED != "1"} ' Name der Form hier setzen!
	Set dc = db.Search(search, Wiedervorlage, 0)
	
	If (dc.Count > 0) Then
		Set newsletter = New NotesNewsLetter(dc)
		Set doc = newsletter.FormatMsgWithDoclinks(db)
		Call doc.Replaceitemvalue("Form", "Memo")
		Call doc.Replaceitemvalue("From", session.Username ) ' test only
		Call doc.Replaceitemvalue("SendTo", session.Username ) ' test only
		Call doc.Replaceitemvalue("Subject", "Wiedervorlage Fortbildung(en)")
		Call doc.Send(False)
		Call dc.Stampall("REMINDED", "1")
	End If

Testcode ohne Gewähr.
« Letzte Änderung: 29.10.15 - 15:11:51 von Andrew Harder »
Andy

Offline manboo8000

  • Junior Mitglied
  • **
  • Beiträge: 61
Re: Wiedervorlage per Agent
« Antwort #8 am: 29.10.15 - 16:04:12 »
also das Feld Wiedervorlage soll nicht neu befüllt werden, falls das so rübergekommen ist.

Es gibt in der Datenbank mehrere Dokumente, bei denen das Feld Wiedervorlage bereits gefüllt ist.

Bspw.

Dokument A: 08.11.2015
Dokument B: 30.11.2015
Dokument C: 06.12.2015
usw.

Der Agent soll jetzt am Monatsersten laufen und dann die Dokumente in einer E-Mail an die Adresse aus dem Konfigurationsdokument anlisten, die in diesem Monat zur Wiedervorlage anstehen.

Also sollte er am 01.11.2015 eine Mail erzeugen, in der Links zu den Dokumenten A + B enthalten sind bspw.

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #9 am: 29.10.15 - 23:25:25 »
dann pass die Suche entsprechend an


Code
	..
	entfällt:	Set Wiedervorlage = New NotesDateTime(Now)
	entfällt:	Call Wiedervorlage.Adjustmonth(-1)
	
	search = {Form = "NameDerForm" & REMINDED != "1"} 'Hier musst Du anpassen
	...

Offline manboo8000

  • Junior Mitglied
  • **
  • Beiträge: 61
Re: Wiedervorlage per Agent
« Antwort #10 am: 04.11.15 - 10:55:11 »
ich merke (leider), dass ich ohne ein Grundlagenseminar nicht wirklich weiter komme.

Mein Code sieht jetzt so aus, funktioniert aber nicht (Fehler in Zeile 15, Objektvariable nicht gesetzt).

Sub Initialize
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim newsletter As NotesNewsLetter
   Dim doc As NotesDocument
   Dim vWiedervorlage As NotesDateTime
   Dim search As String
   Dim empfaenger As String
   
   On Error GoTo ErrorHandler   
   
   Set session = New NotesSession
   Set db = session.CurrentDatabase
   Set vWiedervorlage = New NotesDateTime(doc.Wiedervorlage(0))
   
   search = ((Form = "Fortbildung") & (month(vWiedervorlage)=month(today)) & (year(vWiedervorlage)=year(today))) ' Name der Form hier setzen!
   Set dc = db.Search(search, vWiedervorlage, 0)
   
   If (dc.Count > 0) Then
      Set newsletter = New NotesNewsLetter(dc)
      Set doc = newsletter.FormatMsgWithDoclinks(db)
      Call doc.Replaceitemvalue("Form", "Memo")
      Call doc.Replaceitemvalue("From", session.Username ) ' test only
      Call doc.Replaceitemvalue("SendTo", session.Username ) ' test only
      Call doc.Replaceitemvalue("Subject", "Wiedervorlage Fortbildung(en)")
      Call doc.Send(False)
   End If
   
ErrorHandler:
   
   MsgBox "Wiedervorlage --> Fehler in Zeile: " & Erl & "  (Error" & Str(Err) & ": " & Error$ & ")"
   Exit Sub
   
Ende:   
End Sub

Offline rambrand

  • Senior Mitglied
  • ****
  • Beiträge: 469
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #11 am: 04.11.15 - 11:11:34 »
Hallo,

Code
Set vWiedervorlage = New NotesDateTime(doc.Wiedervorlage(0))

Wo genau nochmal weißt Du Doc ein Dokument zu? Ist der Code wirklich vollständig?
Die Zeilen passen irgendwie nicht zu der Zeilenangabe in der Fehlermeldung.

Bye,
Markus
Domino/Notes ab 4.6 aktuell 10.1FP3
Traveler 10.0.1FP1
PHP-Entwickler
Domino/Notes-Entwickler (Hobby)
Consultant (Informationssicherheit & Datenschutz)

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Wiedervorlage per Agent
« Antwort #12 am: 04.11.15 - 21:17:10 »
Kommentiere mal die folgende Zeile aus, oder lösche sie;
Code
Set vWiedervorlage = New NotesDateTime(doc.Wiedervorlage(0))

Ausserdem nicht
Code
 search = ((Form = "Fortbildung") & (month(vWiedervorlage)=month(today)) & (year(vWiedervorlage)=year(today))) ' Name der Form hier setzen!
sondern
Code
 search = {Form = "Fortbildung" & @month(vWiedervorlage)=@month(@today) & @year(vWiedervorlage)=@year(@today)} ' Name der Form hier setzen!

Das sollte Dich schon mal einen Schritt weiter bringen.
« Letzte Änderung: 04.11.15 - 21:42:56 von Andrew Harder »
Andy

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz