Autor Thema: Ist ein Datum in einem Datumsfeld enthalten?  (Gelesen 3306 mal)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Ist ein Datum in einem Datumsfeld enthalten?
« am: 06.10.15 - 18:02:30 »
Hallo liebes Forum,

ich scheitere gerade mal wieder mit meinen Script Kenntnissen an einem wahrscheinlich popeligen Problem.

Ich erstelle eine Datenbank, in die Seminare eingegeben werden. Diese finden an verschiedenen Tagen statt, die Daten werden in ein Datumsfeld "Sem_Einzeltermine"eingegeben (Mehrfachwerte)

Ich möchte nun, dass der Verantwortliche 14 Tage vorher eine Mail bekommt.

Mein Gedanke war, zum heutigen Datum 14 Tage dazu zu zählen und diesen Wert mit den Einträgen im Datumsfeld zu vergleichen.

Mein Code sieht wie folgt aus (Auszug), das Problem sind die letzten 6 Zeilen:

Zitat
Dim db As NotesDatabase
Dim view As NotesView
Dim view_collection As NotesViewEntryCollection
Dim entry As NotesViewEntry
Dim doc As NotesDocument
Dim docmail As NotesDocument
Dim rtitem As NotesRichTextItem
Dim datum As Variant
Dim item As Notesitem
   
   
'NotesCollection für Seminare
Dim session As New NotesSession
Set db = session.CurrentDatabase
Set view = db.GetView( "(DatumslisteSeminare)" )
Set view_collection = view.AllEntries
   
'hier werden die Dokumente der Reihe nach durchgegangen
        Set entry = view_collection.GetFirstEntry
   
   While Not (entry Is Nothing)
       Set doc = entry.Document
      
      'nur wenn Seminar in 14 Tagen stattfindet

      Set Item = doc.getfirstitem ("Sem_Einzeltermine")
      datum = (Today + 14)
      If Item.contains (datum) then      

...

Im Debuger sehe ich die Einzeltermine im Feld "Sem_Einzeltermine". Ich sehe auch das korrekte Datum im Feld "datum".

Trotzdem schlägt die if-Abfrage in der letzten Zeile immer fehl, es wird keine Aktion ausgeführt. Die Einträge scheinen nicht gleich zu sein.

Ich kapiere nicht warum und wäre um einen Tip dankbar

Thomas
« Letzte Änderung: 07.10.15 - 15:09:50 von iukhdh »
Thomas von der IuK

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Ist ein Datum in einem Datumsfeld enthalten?
« Antwort #1 am: 06.10.15 - 22:34:30 »
Du möchtest Dir Klasse NotesDateTime in der Hilfe ansehen.
Von der Klasse solltest Du Dir dann die Methoden AdjustDay und TimeDifference ansehen.
Damit geht es ganz sicher.

Eine Falle gibt es dabei zu beachten:
Der Client wird wahrscheinlich das deutsche Datumsformat zurückliefern, der Domino (Backgroundagent) das englische.
Hierzu gibt es aber schon ein paar Sachen hier im Forum.
Andy

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Ist ein Datum in einem Datumsfeld enthalten?
« Antwort #2 am: 07.10.15 - 08:46:31 »
Probier mal

Code
   datum = (Today + 14)
   While Not (entry Is Nothing)
       Set doc = entry.Document
      
      'nur wenn Seminar in 14 Tagen stattfindet
      Forall sem_einzeltermin In doc.SemEinzeltermine
         If IsDate (sem_einzeltermin) Then
            If sem_einzeltermin = datum Then

               .... Deine Aktion
               Exit Forall
            End If
         End If
      End Forall

Ohne es zu wissen, könnte ich mir vorstellen, dass item.Contains nicht wirklich für Datumswerte geeignet ist

Sollte das so nicht funktionieren, könnten Uhrzeiten im Termin enthalten sein, dann würde ich den Vergleich über Format machen

Code
   Dim datum As String
   datum = Format (Today + 14, "yyyymmdd")
   While Not (entry Is Nothing)
       Set doc = entry.Document
      
      'nur wenn Seminar in 14 Tagen stattfindet
      Forall sem_einzeltermin In doc.SemEinzeltermine
         If IsDate (sem_einzeltermin) Then
            If Format (sem_einzeltermin, "yyyymmdd") = datum Then

               .... Deine Aktion
               Exit Forall
            End If
         End If
      End Forall

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Ist ein Datum in einem Datumsfeld enthalten?
« Antwort #3 am: 07.10.15 - 12:02:46 »
Hallo Peter,

diese Variante klappt einwandfrei wie ich es brauche. Danke für die Hilfe.

Danke auch an Andrew.
Die NotesDateTime Klasse schau ich mir auch an, nur im Moment muss es flott gehen, da nehm ich die andere Lösung.

Auf jeden Fall wieder was glernt :D

Schönen Tag noch!
Thomas von der IuK

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Ist ein Datum in einem Datumsfeld enthalten?
« Antwort #4 am: 07.10.15 - 14:48:52 »
Eine Beobachtung am Rande noch, die mich ein wenig verwundert.

Der Code funktioniert einwandfrei, aber ich hab nicht gleich bemerkt dass ich statt einer Mail plötzlich 10 mal die gleiche bekommen. 10 Einträge sind im Datumsfeld.

Ich hab erst einen Fehler im Code vermutet, dass die Schleife nicht richtig verlassen wird Aber dann bin ich dahinter gekommen, dass es daran liegt, dass ich in der Ansicht "DatumslisteSeminare" in der Spalte mit den Datumseinträgen (Feld Sem_Einzeltermine) die Auswahl "Mehrfachwerte getrennt anzeigen" gewählt habe.

Das ist mir so bisher nicht bewusst gewesen, dass die Viewcollection so reagiert. Eigentlich ist es doch nur ein einziges Dokument, dass dank der 10 Termine mehrmals in der Ansicht angezeigt wird. Und nicht 10 Dokumente.

Ich hab das mal im Designer verfolgt, der Code geht tatsächlich 10 mal durch und vergleicht dabei dann wieder die 10 Einträge im Feld Sem_Einzeltermine.

Da es sich eh um eine Ansicht handelt die ich verstecken werde, verzichte ich nun auf die Auswahl "Mehrfachwerte getrennt anzeigen" und bekomme damit auch nur eine Mail.

Aber letztlich ist dieses Verhalten doch ein wahnsinniger Ressourcenfresser und erscheint mir irgendwie unlogisch/unvorteilhaft.
Thomas von der IuK

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: Ist ein Datum in einem Datumsfeld enthalten?
« Antwort #5 am: 07.10.15 - 15:17:24 »
Hallo Thomas,

den Eintrag in der Ansicht mit den getrennten Mehrfach-Werten nutzen, um das zu prüfende Datum direkt zu ermitteln (nicht per Feld im Dokument!)-> "entry.ColumnValues(0)" liefert das Datum aus der ersten Spalte für den aktuellen Eintrag zurück. Mit diesem Wert dann weiterarbeiten.

Beim Durchlaufen immer prüfen, ob der aktuelle Eintrag/Wert noch kleiner/gleich 14 Tage-Zeitraum ist. Wenn der Wert nicht mehr kleiner als 14 Tage ist (NotesDateTime.Adjust nutzen um das Vergleichsdatum zu erzeugen), die Routine abbrechen... Evtl. in den Dokumenten ein Feld pflegen, für welches Datum bereits benachrichtigt wurde, damit im Fehlerfall nicht wieder alle Dokumente versendet werden.

MFG
ERR

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Ist ein Datum in einem Datumsfeld enthalten?
« Antwort #6 am: 07.10.15 - 22:28:16 »
Du kannst Dir die Dokumente anstatt aus der Ansicht auch über ein db.Search holen, in der Selektionsformel des db.Search suchst Du dann gleich nur nach Dokumenten, bei denen das gewünschte Datum enthalten ist, dann brauchst Du auch keinen Vergleich mehr durchzuführen.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz