Domino 9 und frühere Versionen > ND9: Entwicklung

[Erledigt] Geburtstagserrinnerung per Mail über einen Agenten

(1/2) > >>

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