Domino 9 und frühere Versionen > ND9: Entwicklung
[Erledigt] Geburtstagserrinnerung per Mail über einen Agenten
Michael Kl:
Einen wunderschönen guten Morgen!
Ich habe vor einen Agenten laufen zu lassen, der alle Geburtstage die in den folgenden 2 bzw. 3 Tagen kommen per Mail an den jeweiligen Kollegen zu schicken.
Der Agent prüft quasi in jedem Dokument "Kontakt" das Geburtsdatum und setzt eine Variable "tag" auf 2 oder 3 Tage in die Zukunft, damit ich per Today Vergleich die If-Schleife bestätigen kann.
Soweit so gut....
Ich habe nur ein kleines Problem, und zwar weiß ich, dass das Datum mit dem Jahr (2015) verglichen wird und ich komme einfach nicht drauf, wie ich nur den Tag und den Monat vergleichen kann.
Sprich also, dass nächstes Jahr keiner benachrichtigt wird.
Ihr habt doch sicherlich einen Rat für mich ;)
Anbei noch meinen Agenten:
%REM
Agent Geburtstage Errinerung
Created 30.01.2015 by Michael Klaus
Description: Comments for Agent
%END REM
Option Public
Option Declare
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
Dim heute As String
Dim dateTime As New NotesDateTime( "heute" )
Dim tag As Variant
Dim adjustment As Integer
tag = CDat(dateTime.dateOnly)
If Weekday(tag) = 2 Or Weekday(tag) = 3 Then ' Monday or Tuesday
adjustment = +3
Else
adjustment = +2 ' any other day
End If
Call dateTime.AdjustDay( adjustment )
tag = CDat(dateTime.dateOnly)
Set db = session.Currentdatabase
Set senddoc = New NotesDocument(db)
Dim dc As NotesDocumentCollection
Dim vw As NotesView
Set vw = db.GetView("IGeburtstage")
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("IKGeburtstag")(0) = tag Then
Set rtitem = New NotesRichTextItem( senddoc, "Body" )
strEmpfaenger = doc.GetItemValue("Author")(0)
strDocname = doc.GetItemValue("IKNachname")(0)
With senddoc
.Form = "Memo"
.SendTo = "Email@Email.de" 'doc.GetItemValue("Author")(0)
.SendFrom = "CRM@Email.de"
.Principal = "CRM@Email.de"
.DisplaySent ="CRM"
.Subject = "Geburtstagscheck - Anstehender Geburtstag - " + strDocName
End With
strBody = "Automatische Erinnerung! Der folgende Kontakt hat am " + tag +" Geburtstag:" & 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
umi:
Hallo
evtl. hilft dir da Format() weiter.
so im Stil von
dim Geburtstag as string
Geburtstag = format(dateTime.dateonly, "dd.mm.")
und dann in der Schalaufe
dim ikgeburtstag as string
...
ikGeburtstag = format(doc.getitemvalue("IkGeburtstag")(0),"dd.mm.")
if ikGeburtstag = Geburtstag then
....
Oder Du machst von Anfang an eine DB.Search um nur die relevanten Termine abzuarbeiten.
Michael Kl:
Hey umi,
danke für deine Antwort! ;)
Ich werde es schnellstmöglich testen und dann meine Ergebnisse berichten.
Zunächst versuche ich mal die db.search aus O0
Peter Klett:
Auch, wenn Du nicht danach gefragt hast, hätte ich einen Vorschlag, das Verfahren zu verfeinern.
Ich würde in dem Dokument das Datum der nächsten Erinnerung abspeichern. Der Kollege hat am 09.02.1980 Geburtstag, daher soll am 06.02.2015 die nächste Mail gesendet werden. Im Dokument steht also in einem Feld "Erinnerung" o.ä. dieses Datum.
Der Agent sendet die Mails für alle Dokumente, deren Erinnerungsdatum heute oder älter ist, und trägt dann das nächste Erinnerungsdatum ein, z.B. den 06.02.2016 oder 07.02.2016, je nach Wochentag des nächsten Geburtstages.
Vorteil dieser Methode ist, dass kein Dokument ausgelassen wird, auch wenn der Agent einen Tag mal nicht läuft (Server ausgefallen, Updatefehler, oder was sonst noch alles passieren kann). Im schlimmsten Fall erinnert er an einen vergangenen Geburtstag, aber das ist immer noch besser, als dass jemand durchrutschen würde.
Michael Kl:
Danke Peter für die nette Ergänzung ;)
Diese Art ist natürlich deutlich besser!
@umi,
mit Format habe ich es leider nicht lösen können, jedoch habe ich eine andere Art gefunden...
datumheute = Day(today.dateonly) & Month(today.dateonly)
geburtstag= Day(datetime.dateonly) & Month(datetime.dateonly)
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln