Domino 9 und frühere Versionen > ND7: Entwicklung

Datumsfeld auf gültige Eingabe prüfen

<< < (2/3) > >>

Peter Klett:
Ich denke, hiermit hebelst Du es aus:

If Trim ( source.FieldGetText ( "CarNextBGInspection" ) ) = "" Then

Du holst Dir aus dem uidoc den Text des falsch gefüllten Datum-Feldes, und da könnte zu dem Zeitpunkt problemlos "otto" drin stehen.

Das läuft im Querysave vermutlich vor der noteseigenen Überprüfung (reine Vermutung, müsste getestet werden).

Was passiert, wenn Du vorher F9 drückst? Falls dann eine Fehlermeldung erscheint, könntest Du vor der Routine ein uidoc.Refresh einbauen.

Was wird als Feldinhalt geliefert, wenn Du es aus dem Backend liest?

If Cstr (source.Document.CarNextBGInspection (0)) <> "" Then

Wenn im Debugger schon ERROR steht, sind die Chancen nicht schlecht, es darüber abzufangen.

Ansonsten ist eine Prüfung mit IsDate auch nicht verkehrt. Das Verhalten erscheint mir aber wegen des source.FieldGetText logisch korrekt zu sein.

Demian:
Wie gesagt, diese Abfrage dient ja nur dazu festzustellen, ob überhaupt etwas eingetragen ist. Ausgehebelt wird das meines Erachtens aber nur bedingt, denn Notes hat ja schon den Text in ERROR: umgewandelt zum Zeitpunkt der Abfrage. Also hat Notes ja schon gemerkt, dass etwas nicht stimmt, es wird nur die Meldung nicht angezeigt.

Bei einem F9 vor dem Speichern erscheint ordnungsgemäß die Meldung. Ein Source.Refresh vor Car_VerifyInput führt in der Tat zu der entsprechenden Meldung. Allerding läuft er dann in meine Error-Routine im Querysave.

Im Backend knallt es ja entsprechend mit der Meldung "Variant enthält keinen Container" bei strCA_BGInspectionNEW = Cstr(source.Document.CarNextBGInspection(0)). So kam das Ganze erst hoch.

Also werd ich das Ganze bei Datumsfeldern jetzt um IsDate ergänzen:


--- Zitat ---If Trim ( source.FieldGetText ( "CarNextBGInspection" ) ) = "" Then
      Msgbox "Der Termin für die nächste Bg Prüfung wurde nicht angegeben!",,"DORNHÖFER GmbH"
      Call ReportWriteWarning (EventName & " - CarNextBGInspection nicht ausgefüllt")   
      
      'RETURN
      Car_VerifyInput = False
      Exit Function
   Else
      If Not (Isdate(source.FieldGetText ( "CarNextBGInspection" ))) Then
         Msgbox "Die Datumsangabe ist ungültig!",,"DORNHÖFER GmbH"
         Call ReportWriteWarning (EventName & " - CarNextBGInspection enthält ungültiges Datum")   
         
         'RETURN
         Car_VerifyInput = False
         Exit Function
      End If 'Not (Isdate(source.FieldGetText ( "CarNextBGInspection" )))
   End If 'Trim(source.FieldGetText("CarNextBGInspection")) = ""
--- Ende Zitat ---
   

Da hab ich mir nie Gedanken zu gemacht, weil ich halt immer dachte Notes macht das schon :-) Was es ja auch tut, wenn der Benutzer das Feld verlässt vor dem Speichern  ;D

Peter Klett:
Du könntest im Querysave auch in ein anderes Feld springen (uidoc.EditGotoField oder so ähnlich), wenn das aktuelle Feld ein Datumsfeld oder ein anderes, besonders zu berücksichtigendes ist.

Damit würdest Du Dir die doppelte Überprüfung sparen.

Demian:

--- Zitat von: Peter Klett am 05.03.12 - 12:11:47 ---Du könntest im Querysave auch in ein anderes Feld springen (uidoc.EditGotoField oder so ähnlich), wenn das aktuelle Feld ein Datumsfeld oder ein anderes, besonders zu berücksichtigendes ist.
--- Ende Zitat ---

Das "Blöde" ist nur, dass ich das dann komplett im Querysave abhandeln muss, wenn es eben eine ungültige Angabe ist. Ein Source.Refresh führte ja auch direkt zum ErrHandle. Dann müsste ich den so entstehenden Fehler (4412 glaub ich) separat abfangen. Dann belass ich es lieber bei IsDate in VerifyInput, das ist für mich übersichtlicher, von der Logik her.

koehlerbv:
Wenn Du im Kampf Backend versus Frontend solche Checks machen musst: Prüfe fragliche (Frontend-)Felder zuallererst mit Isarray ab. Dann erst Isdate oder auch Isnumeric - wenn das Frontend schon streikt, hast Du im Backend kein gültiges Item.

HTH,
Bernhard

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln