Autor Thema: [Erledigt] Geburtstagserrinnerung per Mail über einen Agenten  (Gelesen 4820 mal)

Offline Michael Kl

  • Frischling
  • *
  • Beiträge: 38
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
« Letzte Änderung: 13.02.15 - 13:13:09 von Michael Kl »

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Geburtstagserrinnerung per Mail über einen Agenten
« Antwort #1 am: 02.02.15 - 14:26:08 »
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.

Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Michael Kl

  • Frischling
  • *
  • Beiträge: 38
Re: Geburtstagserrinnerung per Mail über einen Agenten
« Antwort #2 am: 03.02.15 - 14:44:23 »
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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Geburtstagserrinnerung per Mail über einen Agenten
« Antwort #3 am: 04.02.15 - 12:45:10 »
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.

Offline Michael Kl

  • Frischling
  • *
  • Beiträge: 38
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)


Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Geburtstagserrinnerung per Mail über einen Agenten
« Antwort #5 am: 12.02.15 - 14:44:27 »
Ich denke nicht, dass das eine gute Lösung ist. Probiere mal dieses Script in einem Button

Code
Sub Click(Source As Button)
	Dim datum1 As String	
	Dim datum2 As String
	Dim d1 As New NotesDateTime ("02.12.2015")
	Dim d2 As New NotesDateTime ("21.02.2015")
	
	datum1 = Day(d1.dateonly) & Month(d1.dateonly)
	datum2 = Day(d2.dateonly) & Month(d2.dateonly)
	
	Msgbox datum1 & " " & datum2
End Sub

Format ist ein guter Befehl, um Datumsbestandteile in einen String umzuwandeln.

Format (Today, "dd.mm.")

ergibt heute diesen String zurück: "12.02."

Natürlich kannst Du auch mit Deinem Konstrukt arbeiten, aber Du darfst nicht die führenden Nullen ignorieren. Oder Du musst ein Trennzeichen zwischen Tag und Monat verwenden.

Offline Michael Kl

  • Frischling
  • *
  • Beiträge: 38
Re: Geburtstagserrinnerung per Mail über einen Agenten
« Antwort #6 am: 12.02.15 - 15:23:39 »
Stimmt!
Das wäre mir wohl erst später aufgefallen.

Aber der Agent springt immer 2-3 Tage in die Zukunft und möchte ja wenn jemand an diesen Tagen Geburtstag hat einen gleichen Wert erhalten.

Zum Beispiel hat ein Kontakt am 01.02.2015 Geburtstag,
dann wird an einem 01.02.2015 doch in beiden Fällen die Null ignoriert und somit müsste es keine Probleme geben oder sehe ich das alles zu einfach?

Danke dass du dir die Mühe machst mir zu helfen  :)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Geburtstagserrinnerung per Mail über einen Agenten
« Antwort #7 am: 12.02.15 - 16:33:43 »
Ein Kontakt hat am 01.11. Geburtstag. Dein Agent startet am 09.01., rechnet zwei Tage voraus, findet mit 111 (für den 11.01.) den Kontakt, und sendet eine Mail.

Auf solch dünnes Eis würde ich mich niemals begeben, auch wenn es genügend Gründe gibt, dass es in der einen oder anderen Konstellation keine Komplikationen geben sollte.

Ein Format (datum, "ddmm") gibt Dir "0111" zurück, oder für den 11.01. "1101", da kann nichts schief gehen.

Offline Michael Kl

  • Frischling
  • *
  • Beiträge: 38
Re: Geburtstagserrinnerung per Mail über einen Agenten
« Antwort #8 am: 13.02.15 - 13:11:24 »
Ich habe nun das format(datum, "dd.mm.") benutzt.
Damit wird es sicherlich keine Probleme mehr geben ;)

Ich danke dir vielmals  8) 8)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz