Das Notes Forum

Domino 9 und frühere Versionen => ND6: Administration & Userprobleme => Thema gestartet von: Tina am 21.10.04 - 13:26:52

Titel: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 13:26:52
Hi @all!
Ich habe ein Problem mit der Validierung eines Datums-Feldes. Die Situation:

Ich habe eine Aufgaben DB, in deer Aufgaben eingegeben werden können. Bei den Aufgaben kann ein Termin angegeben werden. Habt ihr nen Tipp wie ich auf gültiges, bzw ungültuges Datum prüfen kann??
Hier der Codeschnipsel was ich bis jetzt hinbekommen habe (erkennt das es ein ungültiges Datum ist, nur bei gültigem Datum fliegt er mit ner Fehlermeldung raus)
Das ganze steht im Querysave der Maske:

'-- Termin
varDatTest = doc.kbTermin '--> Hier steht der eingegebene Termin drin
If Not (varDatTest = Null)) Then
   If doc.kbtermin(0) ="" Then
      strValText = strValText + "Termin -> Das Datum darf nicht leer sein" & Chr$(13)
   Else      
      If doc.kbtermin(0) < Today Then
        strValText = strValText + "Termin -> Das Datum darf nicht in der Vergangenheit liegen" & Chr$(13)
      Else         
        If Not Isdate(doc.kbtermin(0)) Then
            strValText = strValText + "Termin -> Bitte geben Sie einen gültigen Datumswert ein" & Chr$(13)
        End If
      End If
   End If
Else
   strValText = strValText + "Termin -> Bitte geben Sie einen gültigen Datumswert ein" & Chr$(13)
End If
Titel: Re: Validierung für Date/Time Feld
Beitrag von: mibo11 am 21.10.04 - 13:30:06
Hallo Tina,

welche Fehlermeldung kommt an welcher Stelle?

Gruß Sascha
Titel: Re: Validierung für Date/Time Feld
Beitrag von: klaussal am 21.10.04 - 13:32:24
Ich hasse so verschachtelete if's:
Deshalb:

If doc.kbtermin(0) ="" Then
      strValText = strValText + "Termin -> Das Datum darf nicht leer       sein" & Chr$(13)
goto ENDE
End If

If doc.kbtermin(0) < Today Then
        strValText = strValText + "Termin -> Das Datum darf nicht in der Vergangenheit liegen" & Chr$(13)
 goto ENDE
End If
.
.
.
.
ENDE:

So kann ich auch besser nachprüfen, wo und warum er rausfliegt.

klaus      
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 13:33:46
@mibo11:
Sorry, hatte ich vergessen:
If Not (varDatTest = Null)) Then
An dieser Stelle und es ist ein Type mismatch Fehler. Ich denke, dass wenn dort ein richtiges(gültiges) Datum drinsteht, kann er es nicht auf Null prüfen, oder denke ich falsch??

@Klauss:
Wenn ich mit Goto's anfange dann sind meine Ausbilder nicht wirklich froh...
Titel: Re: Validierung für Date/Time Feld
Beitrag von: mibo11 am 21.10.04 - 13:42:14
Hallo Tina,

wenn ich das richtig interpretiere handelt es sich bei dem Feld kbTermin um ein Datumsfeld, dadurch müsste Notes beim Aktualisieren des Feldes automatisch eine Fehlermeldung generieren sobald ein ungültiges Datum eingegeben wurde. Dadurch kannst du dir wahrscheinlich dein erstes IF sparen.

Korrigiere mich bitte wenn ich falsch liegen sollte.

Gruß Sascha
Titel: Re: Validierung für Date/Time Feld
Beitrag von: klaussal am 21.10.04 - 13:43:41
@Tina,
dann lass mal deine Ausbilder sich diese Verschachtelung in 5 Monaten wieder ansehen. Die fangen dann erst einmal an nachzudenken, was da gemacht wird.

klaus


Das kbTermin würd ich ja bei einem neuen Doc mit Tagesdatum vorbelegen.
Ansonsten  If Trim(doc.kbTermin(0)) = "" then.....
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 13:47:32
@Sascha:
Natürlich generiert Notes ne Fehlermeldung (variant does not contain a container), doch die Anwender verstehen die, denk ich mal nicht, außerdem zieht das noch nen langen "Rattenschwanz" hinter sich her. Da kommt nämlich nicht nur eine Meldung (unable to interpret Date/Time).
@Klauss:
Was soll ich denn sonst machen (ohne Goto's)?

Deinen Vorschlag hab ich auch schon probiert, der ist ja auch in der Validierung mit drin, auch das Vorbelegte Feld, nur was ist wenn der Anwender meint, er gibt selber das DAtum ein und vertut/vertippt sich??
Titel: Re: Validierung für Date/Time Feld
Beitrag von: m3 am 21.10.04 - 13:48:09
1) Du moechtest statt varDatTest = Null die IsNull() Funktion verwenden ;)
2) Die  geschachtelten IFs lassen sich mittels ElseIf auch ohne GoTo schoener aufloesen.
Titel: Re: Validierung für Date/Time Feld
Beitrag von: klaussal am 21.10.04 - 13:50:57
@Tina,

ist der kbTermin ein Kalender/Uhrzeit-Steuerelemnt ? Da kann mann/frau im Prinzip kein ungültiges Datum eingeben. Wenn doch, dann kommt eben besagte Fehlermeldung. Das ist aber da gleiche, wie wenn ich in eine Zahlenfeld Buchstaben eingebe...  ;D


klaus
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 13:55:16
@m3:
das isNull() funzt net! da erkennt er nicht das varDatTest leer oder Null ist.
Mit den Elseif s schau ich mal, danke!

@Klaus:
es ist ein Date/Time Control, wenn die User reinklicken, können sie doch per hand nen Datum eingeben, und wenn das nicht stimmt, dann knallts in meiner Anwendung.
Titel: Re: Validierung für Date/Time Feld
Beitrag von: klaussal am 21.10.04 - 13:56:50
@Tina

dann knallt's nicht, sonder LoNo meckert....  ;D

klaus
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 13:58:21
Hast ja recht! ;)

Kann man nirgends sonst die Falscheingabe abfangen? Im Input Validation hab ich es schon probiert, aber das war auch nix!
Titel: Re: Validierung für Date/Time Feld
Beitrag von: m3 am 21.10.04 - 13:59:36
Zum Ueberpruefen, ob ein Feld leer ist, gibts ja auch IsEmpty ( expr ) ;)
Titel: Re: Validierung für Date/Time Feld
Beitrag von: klaussal am 21.10.04 - 14:00:40
@tina,

warum ? Das macht doch LoNo für mich. Ansonsten müsste ich ja prüfen: ist es ein Schaltjahr ? hat der Monat 29 oder 30 oder 31 Tage, etc.... ?

klaus
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 14:04:15
@Sascha:
Ich glaub, das wars! :-*

@klaus:
Hast ja recht! Warum das Rad neu erfinden, oder wie heißts so schön??? ;D

@All:
Danke für eure schnelle Hilfe! Ihr seid doch die Besten!!!! :-*
Titel: Re: Validierung für Date/Time Feld
Beitrag von: klaussal am 21.10.04 - 14:05:17
Danke für die Blumen  :-* :) :-*
Titel: Re: Validierung für Date/Time Feld
Beitrag von: koehlerbv am 21.10.04 - 14:09:08
Warum sowieso so kompliziert ?

Eingabevalidierung: @ (!@IsTime (DatumsFeld); @Failure ("Gemecker"); @Success)

Wenn es erforderlich ist, in LS abzuprüfen (ob überhaupt ein Datum da ist, bevor damit gedealt wird):
If Not (IsDate (NotesDocument.Datumsfeld (0))) then
    Messagebox "Gemecker"
    Else
     'Mach weiter
End If

HTH,
Bernhard
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 14:14:29
@koehlerbv:
Mit Formel ghts leider nicht, da eine eigene Messagebox ausgegeben werden soll.
Mit IsDate() tuts auch nicht, da versucht Notes das ungültige Datum zu verwursten und fliegt natürlich mit ner netten Fehlermeldung raus.
Glücklicherweise funktionierts jetzt so:

varDatTest = doc.kbTermin
If Not Isempty(varDatTest) Then
  If doc.kbtermin(0) = "" Then
    strValText = strValText + "Termin -> Das Datum darf nicht leer sein" & Chr$(13)
  Else      
    If doc.kbtermin(0) < Today Then
       strValText = strValText + "Termin -> Das Datum darf nicht in der Vergangenheit liegen" & Chr$(13)
    Else         
       If Not Isdate(doc.kbtermin(0)) Then
          strValText = strValText + "Termin -> Bitte geben Sie einen gültigen Datumswert ein" & Chr$(13)
       End If
    End If
  End If
Else
  strValText = strValText + "Termin -> Bitte geben Sie einen gültigen Datumswert ein" & Chr$(13)
End If


Trotzdem Danke für die Hilfe!!!
Titel: Re: Validierung für Date/Time Feld
Beitrag von: koehlerbv am 21.10.04 - 14:20:49
In welcher Konstellation sollte Dir denn IsDate etwas anderes als True oder False entgegenwerfen ?

Bernhard
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 14:41:03
Ich bin froh dass es so funzt.
Ich weiß nicht, ob es nur mit isDate funktioniert. Ich hatte das vorher alleine und da hat mir Notes auch bei ungültigen Daten keine Fehlermeldung ausgegeben!
Titel: Re: Validierung für Date/Time Feld
Beitrag von: m3 am 21.10.04 - 14:42:47
Huebscher (IMHO):
Code
If Not Isempty(varDatTest) Then
  If doc.kbtermin(0) = "" Then
    strValText = strValText + "Termin -> Das Datum darf nicht leer sein" & Chr$(13)
  ElseIf doc.kbtermin(0) < Today Then
       strValText = strValText + "Termin -> Das Datum darf nicht in der Vergangenheit liegen" & Chr$(13)
  ElseIf Not Isdate(doc.kbtermin(0)) Then
          strValText = strValText + "Termin -> Bitte geben Sie einen gültigen Datumswert ein" & Chr$(13)
  End If
Else
  strValText = strValText + "Termin -> Bitte geben Sie einen gültigen Datumswert ein" & Chr$(13)
End If
Weiters wuerde ich den Test Isdate() VOR doc.kbtermin(0) < Today machen, sonst ist er sinnlos. ;)
Titel: Re: Validierung für Date/Time Feld
Beitrag von: koehlerbv am 21.10.04 - 14:44:55
IsDate ("") ist natürlich False.

Der Datentyp muss natürlich passen.
IsDate (NotesDocument.DeinFeld) geht in die Hose (wegen Array)
IsDate (NotesDocument.DeinFeld (0)) passt und reagiert nur mit True oder False.

HTH,
Bernhard
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 14:52:06
Ich hatte es vorher ohne das If isEmpty(..) Then.... stehen und es tat nicht das was es sollte, wahrscheinlich lag es an der Reihenfolge meiner Abfragen... aber daran hab ich natürlich nicht gedacht! :)
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 14:56:00
@koehlerbv:
Habs grad nochmal mit dem isDate() probiert und es klappt nicht! Er fliegt mit ner Fehlermeldung (varaint does not contain a container) raus.
Titel: Re: Validierung für Date/Time Feld
Beitrag von: koehlerbv am 21.10.04 - 14:59:07
Was für eine Fehlermeldung ?
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Marinero Atlántico am 21.10.04 - 15:01:41
Ich finde auch Bernhards Lösung besser, weil kürzer.

@Tina: hast du:
Code
If Not (IsDate (NotesDocument.Datumsfeld (0))) then
    Messagebox "Gemecker"
    Else
     'Mach weiter
End If

oder
Code
If Not (IsDate (NotesDocument.Datumsfeld)) then
    Messagebox "Gemecker"
    Else
     'Mach weiter
End If
? Finde den Unterschied  ;D

Das Problem bei Script-Validierung ist, dass Validierungsregeln
- je länger die Lebensdauer des Projekts ist und
- je banknäher eine Organisation ist (langjährige empirische Erfahrung)
immer komplizierter werden.


Mich hat z.B. heute morgen auch gerade wieder so eine Validierung mit
Code
if
  if 
    if trim$(doc.xxxFeld(0)) <> "" OR trim$(doc.yyyFeld(0)) <> "" OR trim$(doc.zzzFeld(0)) <> "" then
über 1 STunde aufgehalten, weil da nach dem zzzFeld ="" statt <> "" stand. (Folge von copy und paste).

Ich hab schon einige Validierungsframeworks gesehen, die im Selbstknieschuss endeten, aber vielleicht sollte man daran nochmal arbeiten.

Gruß Axel
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 15:03:24
@koehlerbv:
Fehlermeldung: Variant does not contain a container.

@Axel:
Wie gesagt es funktioniert nicht mit isDate().


Hab jetzt das Script noch etwas gekürzt:

varDatTest = doc.kbTermin
If Not Isempty(varDatTest) Then
  If doc.kbtermin(0) = "" Then
    strValText = strValText + "Termin -> Das Datum darf nicht leer sein" & Chr$(13)
  Elseif doc.kbtermin(0) < Today Then
    strValText = strValText + "Termin -> Das Datum darf nicht in der Vergangenheit liegen" & Chr$(13)
  End If
Else
  strValText = strValText + "Termin -> Bitte geben Sie einen gültigen Datumswert ein" & Chr$(13)
End If
Titel: Re: Validierung für Date/Time Feld
Beitrag von: koehlerbv am 21.10.04 - 15:05:54
Evtl. weiss ich, wo es bei Dir hakt: Wurde ein Wert eingegeben, der aussieht, wie ein Datum ("31.02.2004"), dann wird das Item von Notes nicht gefüllt - es ist ja kein Wert, der in ein Datumsfeld passt.

Daher schön kurz (so wie el Marinero eben schon schrieb):

If IsEmpty (NotesDocument.Datumsfeld) then
   Messagebox "Gemecker"
    Exit Sub
    Else
    If Not (IsDate (NotesDocument.Datumsfeld (0))) then
       Messagebox "Gemecker"
       Else
       'Deine weiteren Prüfungen - jetzt isses ein Datum !
       End If
     End If

HTH,
Bernhard
Titel: Re: Validierung für Date/Time Feld
Beitrag von: Tina am 21.10.04 - 15:12:52
@bernhard:
genau so ist es! Ich habs die ganze Zeit mit nem ungültigen Datum a la "32.10.2004" getestet.
  ;)