Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Cobi am 18.07.07 - 11:14:48
-
Hallo zusammen,
ich habe folgenden Code im QuerySave.
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim uiDoc As NotesUIDocument
Dim doc As NotesDocument
Dim i As Integer
Dim s As String
Set doc = Source.Document
Set uiDoc = ws.CurrentDocument
'Eingabevalidierung per Script abhängig vom feld typ
s = source.FieldGetText("banf_nr")
If Isnumeric(s) Then
continue=True
Else
Messagebox("Es sind keine Zeichen im Feld zugelassen!")
Call Source.GotoField("banf_nr")
Continue = False
If source.FieldGetText("typ")="Bestellanforderung" Then
If Len(s)<>10 Then
Messagebox("Bitte geben Sie die korrekte 10 stellige Bestellanforderungsnummer ein!")
Call Source.GotoField("banf_nr")
Continue = False
Else
Call doc.Save(True, False)
End If
Else
If (Len(s) < 9) Or (Len(s) >10) Then
Messagebox("Bitte geben Sie die korrekte 9 oder 10 stellige Bestellnummer ein!")
Call Source.GotoField("banf_nr")
Continue = False
Else
Call doc.Save(True, False)
End If
End If
End if
End Sub
Dies funktioniert auch wirklich wunderbar. Allerdings, wenn ich jetzt eine Eingabe mache bsp. 123456789m dann speichern drücke, dann kommt die Fehlermeldung- soweit ok. Sobald ich allerdings anschließend auf Abbrechen gehe, dann wird das Dokument gespeichert und erscheint in der Ansicht.
Warum? Und wie kann ich das verhindern?
Danke und grüße
Tanja
-
Wenn im Feld "typ" "Bestellanforderung" steht, führst Du das doc.Save aus - Notes tut also, was Du ihm sagst.
Sowas kann man auch im Debugger schön selbst verfolgen.
Bernhard
-
Aber ich habe doch am anfang schon die Abfrage, dass wenn ein Zeichen enthalten ist, dass dann abgebrochen werden soll.
If Isnumeric(s) Then
continue=True
Else
Messagebox("Es sind keine Zeichen im Feld zugelassen!")
Call Source.GotoField("banf_nr")
Continue = False
Oder erreiche ich das damit nicht?
-
Dann läuft der Code weiter - Nach dem Continue = False wird das
If source.FieldGetText("typ")="Bestellanforderung" Then
ausgeführt.
Hinter dem Continue = False muss also QuerySave verlassen werden mit Exit Sub.
Bernhard
-
Mist Bernhard war schneller.
:'(
-
ahh super danke! Jetzt funktionierts.
Allerdings schließt er das Fenster jetzt, wenn ich zum Beispiel nur 4 Zeichen eingebe...
Irgendwie muss ich das anders verschachteln. Werde mal ein wenig tüffteln...
-
Ist irgendwie logisch das er das so macht. Dein erste Prüfung ist auf Isnumeric und wenn deine Eingabe nicht Numeric ist machst du erst die Längenprüfungen.
-
Zur Vollständigkeithalber hier der korrekte Code:
s = source.FieldGetText("banf_nr")
if not isnumeric(s) then
msgBox("Es sind keine Zeichen im Feld zugelassen!")
continue=false
else
if source.getfieldtext("typ")="Bestellanforderung" then
If Len(s)<>10 Then
Messagebox("Bitte geben Sie die korrekte 10 stellige Bestellanforderungsnummer ein!")
Call Source.GotoField("banf_nr")
Continue = False
else
Call doc.Save(True, False)
End If
Else
If (Len(s) < 9) Or (Len(s) >10) Then
Messagebox("Bitte geben Sie die korrekte 9 oder 10 stellige Bestellnummer ein!")
Call Source.GotoField("banf_nr")
Continue = False
Else
Call doc.Save(True, False)
End if
End If
End if
danke fürs auf die Sprünge helfen.
-
Bestellanforderungsnummer
?
oder
Bestellnummer
?
-
je nach dem welcher Typ (in einem Dialogfeld ausgewählt ist. Bei Bestellanforderungsnummer muss die Eingabe 10stellig sein.
Bei Bestellnummer 9 oder 10 stellig.
-
OK.
-
Das NotesDocument.Save in einem QuerySave-Event erschliesst sich mir auch nicht.
Die unterschiedlichen Begriffe in der Fehlermeldung sind wohl korrekt, da es sich lt. dem Feld "typ" um unterschiedliche Zusammenhänge handelt, Klaus.
Bernhard
-
Wie Bernhard schon gesagt hat. Der Save ist an dieser Stelle ziemlich sinnlos, weil das Dokument ja ohnehin gespeichert wird.
-
Wie Bernhard schon gesagt hat. Der Save ist an dieser Stelle ziemlich sinnlos, weil das Dokument ja ohnehin gespeichert wird.
Aber schaden tut es ja nicht oder kann es zu konflikten kommen?
-
Dieses Save ist SINNLOS....
Ob es an der Stelle schadet oder nicht ist deshalb völlig irrelevant...
Manchmal führt ein solches Save aber zu der Meldung "Versuch verschachtelter Ereignisse..." (oder so ähnlich).
Un dich könnte mir durchaus Situationen vorstellen, wo das dann zu Replikations- Konflikten führt.
Ich sehe immer wieder, dass manche Entwickler jede "historisch gewachsene" Zeile Code in Ihrem Script lassen, egal wie sinnvoll oder sinnlos, nur aus "sentimentalen" Gründen. Code ohne Funktion gehört gelöscht (es sei denn man braucht es später wieder, das ist aber bei diesem Save definitiv NIE der Fall)
Gruß
Tode