Domino 9 und frühere Versionen > ND6: Entwicklung
NotesDateTime und TimeDifferenceDouble
Katja_S:
Also: ich durchsuche alle Dokumente einer bestimmten Ansicht und ziehe von diese zwei Datumswerte heraus: oldBegin und oldEnde. Diese beiden Datumswerte vergleiche ich mit dem aktuell geöffneten Dokument (neues Dokument), also mit aDatum und eDatum. Ist aDatum bzw. eDatum bereits im Zeitraum von oldBegin - oldEnde enthalten, soll eine Fehlermeldung ausgegeben werden.
Beispiel:
oldBegin: 06.01.2003
oldEnde: 18.02.2003
aDatum: 02.04.2003
eDatum: ""
Weil nun aber eDatum.TimeDifferenceDouble(oldBegin) = 0 TRUE zurückliefert, geht Notes in die "falsche" Abfrage rein und gibt die Fehlermeldung aus, obwohl ja der 02.04.03 überhaupt nicht im Zeitraum vom 06.01.2003 - 18.02.2003 liegt.
Konnte ich das Problem einigermaßen gut erläutern? Ich weiß nicht, wie ich das am besten löse...String-Vergleich geht ja auch nicht... :-:
Thomas Schulte:
Das ist kein Problem das du über den Sprachansatz löst sondern eines das du erst einmal über die Logik lösen musst.
zum Einen musst du dir darüber klar werden was du willst.
Du hast hier offensichtlich zwei DateRanges.
Range1 = oldBegin und OldEnde
Range2 = aDatum (soll wohl Anfangsdatum heisen) und eDatum (Enddatum?)
Deine Bedingung ist das entweder aDatum oder eDatum im Bereich in Range1 liegen sollen.
Das heist wenn
oldbegin <=adatum <=oldEnde oder
oldbegin <=edatum <=oldEnde dann ist alles richtig.
ein nicht eingegebenes Datum ist folglich nicht in dem Bereich enthalten und fällt damit weg.
So beschreibst du das, obwohl ich da so meine Zweifel habe ob das richtig ist, denn so was macht nur dann Sinn wenn du überprüfen willst ob Range2 in Range1 enthalten ist.
Also erste Maßnahme, dafür sorgen das eDatum auf jeden Fall gesetzt wird.
Zweite Maßnahme, sollte entweder eDatum oder aDatum nicht gesetzt sein dann setze den nicht gesetzten Wert gleich dem gesetzten Wert.
Dritte Maßnahme, gehe nicht über den timedifferencedouble sondern vergleiche die Datum Werte direkt miteinander. und wenn es wirklich ein Range2 in Range1 enthalten prblem ist dann geht das mit:
oldbegin <=adatum AND eDatum <=oldende
Katja_S:
du hast das Problem richtig erkannt. Liegt Range2 innerhalb von Range1, dann soll eine Fehlermeldung rauskommen. Diese soll aber auch kommen wenn:
aDatum < oldBegin AND eDatum > oldEnde
Bsp: Range1: 18.02.03 - 20.02.03
Range2: 17.02.03 - 21.02.03
eDatum darf aber auch leer sein. Ist so festgelegt worden. Aber wie vergleich ich Datumswerte direkt miteinander? Bin bereits über DateOnly gegangen, aber Strings mit > oder < vergleichen hat auch nicht funktioniert. Daher bin ich über TimeDifferenceDouble gegangen. Das erweist sich jetzt auch als "unbrauchbar". Bin langsam mit meinem Latein am Ende. Was nun? :-:
Thomas Schulte:
Also wenn Edatum auch leer sein darf dann ist aDatum = edatum denn der Range ist dann halt exakt dieser Tag.
Logische Schlussfolgerung.
Also ist die Fehlermeldung dann relevant wenn:
(oldbegin <=adatum AND eDatum <=oldende) OR (adatum < oldbegin AND eDatum > oldEnde)
Und so funktioniert das:
Set begindate = session.CreateDateTime( "01.01.2004" )
Set enddate = session.CreateDateTime( "" )
Set oldbegindate = session.CreateDateTime( "01.02.2004" )
Set oldenddate = session.CreateDateTime( "01.09.2004" )
If enddate.DateOnly = "" Then
Set enddate = begindate
End If
If (oldbegindate.lslocaltime <= begindate.lslocaltime And enddate.lslocaltime <=oldenddate.lslocaltime)_
Or (begindate.lslocaltime < oldbegindate.lslocaltime And enddate.lslocaltime > oldEnddate.LSLocalTime) Then
Messagebox("Fehler")
Else
Messagebox("OK")
End If
Wobei ich immer noch nicht sicher bin ob du deine Randparameter richtig gesetzt hast weil mir diese Art des Vergleiches spanisch vorkommt.
Katja_S:
Danke dir, Thomas. Habe deine Maßnahme mit dem Setzen des Enddatums = Anfangsdatum (falls Enddatum leer ist) umgesetzt und jetzt scheint alles (mit TimeDifferenceDouble und NotesDateTime) zu funktionieren. Die Randbedingungen sollten eigentlich stimmen. Zur Info:
beginDate == oldBeginDate
endDate ==oldEndDate
beginDate == oldEndDate
endDate ==oldBeginDate
beginDate > oldBeginDate AND beginDate < oldEndDate
endDate > oldBeginDate AND endDate < oldEndDate
beginDate < oldBeginDate AND endDate > oldEndDate
beginDate > oldBeginDate AND endDate < oldEndDate
Die Variante mit CreateDateTime und lslocaltime werde ich mir auch mal näher anschauen. Also, vielen Dank!
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln