Domino 9 und frühere Versionen > ND9: Entwicklung
Ist ein Datum in einem Datumsfeld enthalten?
iukhdh:
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
...
--- Ende Zitat ---
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
Andrew Harder:
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.
Peter Klett:
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
--- Ende Code ---
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
--- Ende Code ---
iukhdh:
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!
iukhdh:
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.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln