Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: oson00 am 02.08.06 - 18:48:22
-
Hallo,
ich habe ein ganz merkwürdiges Phänomen. Ich hole mit aus zwei Feldern die Datumswerte und vergleich, welches größer ist.
Ich hole mir die Feldwerte in ein NotesDateTime Objekt und habe bereits probiert die Daten direkt mit .LSLocalTime, aber auch mit .TimerDifference zu vergleichen. Der gesamte Scriptcode steckt in einem Agenten, der aus einer Ansicht aufgerufen wird.
Wenn ich ihn normal laufen lasse, funktioniert das ganze überhaupt nicht, wenn ich debugge funktioniert's. Ich verstehe nicht warum. Hat jemand eine Idee?
-
Ohne Code lässt hierzu nur gaaaaanz schlecht etwas sagen.
Nur: Warum machst Du es Dir bei einem solchen Vergleich eientlich so kompliziert? Datumswerte sind eigentlich (!) nichts anderes als Zahlen in der internen Behandlung (Datumsseriennummern).
Wenn Du wissen möchtest, welcher Wert grösser ist, dann reicht folgendes LS-Konstrukt vollkommen:
If NotesDocument.EndDateTime (0) >= NotesDocument.StartDateTime (0) Then
Messagebox "Der Endzeitpunkt ist grösser oder gleich dem Startzeitpunkt"
Else
Messagebox "Der Endzeitpunkt ist kleiner dem Startzeitpunkt"
EndIf
Das Ganze lässt sich natürlich noch beliebig verfeinern ;-)
Haarig wird es erst dann, wenn Du Datums-/Zeitwerte aus unterschiedlichen Zeitzonen vergleichst - dann kommst Du um die NotesDateTime Class nicht herum.
HTH,
Bernhard
PS: Vor dem Dealen mit Datums-/Zeitwerten nicht vergessen zu prüfen, ob dies auch wirklich solche sind: IsDate ...
-
Den Code habe ich absichtlich nicht mit gepostet, weil der durch meine Versuche mittlerweilen nicht mehr so schön ist. Ich räume nochmal auf und probiere die direkte Technik. Aber ganz allgemein sind keine Probleme bekannt beim vergleich von Datumswerte? Manchmal gibt es ja die dollsten Dinger in Notes...
-
Leider funktioniert es nicht. :(
Hier mal ein Ausschnitt:
dim ndtstart as Variant
dim ndttmpstart as Variant
dim ndtEnd as Variant
dim ndttmpStop as Variant
...
ndtStart = doc.getItemValue("StartDatum")(0)
.
.
.
If ndtstart <= ndttmpstart Then
If ndtEnd >= ndttmpstop Then
Print "Ich tu was..."
' ... in ein neues Backend-Dokument wird ein RT-Feld gefüllt...
End If
End If
Die Datumsfelder haben z.B. folgende Inhalte:
ndtstart: 03.08.2005
ndtend: 03.08.2006
ndttmpstart: 04.05.2006 14:30:59
ndttmpstop: 07.06.2006 14:45:08
Bin ich zu doof? Übersehe ich da was? Habe ich einen logischen Fehler gemacht? Wie gesagt, wenn ich Debugge, läuft der Debugger in den "Tu was"-Teil, ohne Debugge überspringt er den gesamten Bereich.
-
Hi.
Schau Dir nochmal das Beispiel von Bernhard an und denk an die Überprüfung auf IsDate.
André
-
Es handelt sich dabei um Datumswerte. Ich habe die isDate Abfrage im Beispiel weggelassen um es zu vereinfachen. Meine Testdokumente besitzen auch wirklich Datumswerte. Notes macht aber nicht was ich will. :(
-
Notes macht aber nicht was ich will. :(
Nein - Du tust nicht, was Notes von Dir erwartet.
Datumsvergleiche sind absoluter Standard in Notes, es sind dabei keine Schwierigkeiten zu erwarten. Man muss es nur richtig machen. Und irgendwo machst Du eben einen Fehler, der sich mir aus der Ferne aber noch nicht erschliesst.
Bernhard
-
Wie ist es zu erklären, dass es beim Debuggen funktioniert, aber ohne Debugger nicht?
-
Wir können ohne weitere Infos nicht beurteilen, was das bedeutet, dass es "mit dem Debugger klappt". Du musst irgendwo einen Denkfehler in Deinem Code haben. Dass ein Datumsvergleich nicht klappt, der korrekt durchgeführt wird, ist genauso unwahrscheinlich, als dass Messagebox "Notes" zur Ausgabe von "Outlook" führt.
Bernhard
-
Was bedeutet "funktioniert das ganze überhaupt nicht"? Was passiert genau, in welcher Zeile?
Hast du eine Fehlerbehandlung eingebaut, die auftretende Fehler in einem z.B. AgentLog aufzeichnet (http://www-128.ibm.com/developerworks/lotus/library/ls-Troubleshooting_agents_ND5_6/#N101C4)?
-
Es handelt sich dabei um keinen periodischen Agenten. Er wird einfach nur lokal vom User ausgeführt.
Wenn ich Debugge, wird der Datumsvergleich korrekt ausgeführt und das Print wird ausgegeben.
Wenn ich ihn normal laufen lasse, wird der Datumsvergleich nicht korrekt ausgeführt und das Print übersprungen.
Ich habe vorweg die Variablenwerte ausgeben lassen. Laut den Werten müßte der If-Block ausgeführt werden, das passiert aber leider nicht.
-
Also nochmal: Datumsvergleiche mit LotusScript funktionieren sehr zuverlässig, insofern man keine Fehler macht.
Das mit dem Item-Types können wir bei Dir offensichtlich ausschliessen (es sind ganz sicher Datums-/Zeit-Werte und keine Strings? Okay, sonst würdest Du ja auch ein type mismatch bekommen). Kann es sein, dass unter den Feldern gar keine Items sind, sondern Felder "computed for display"?
Wo steht der Code? In einem Agent? Wenn ja: Was für ein Agent? Greift dieser auf das Back- oder Frontend zu (bisher sehe ich nur Backend).
Auf jeden Fall: Du machst da irgendeinen Fehler. Ohne genaue Kenntnis Deines Codes ist das - auch das wurde schon gesagt - schwer nachzuvollziehen. Lösbar ist Dein Problem aber auf jeden Fall (ist ja ein simples).
Bernhard