Theoretisch kannst du Errorhandling dafür benutzen. Das ist aber aus verschiedenen Gründen keine gute Idee:
a) verwirrt spätere maintainance Programmierer.
b) ist viel code
c) sieht unschön aus.
d) sehr schlecht für die Performance.
Funktioniert aber und hat funktional keine Nebenwirkungen. (natürlich performance und Wartbarkeit, aber das ist nicht-funtional)
Code für einen Button in einer Maske:
Sub Click(Source As Button)
On Error Goto FehlerGlobal
Dim isANumber As Boolean
Dim xTremeNotNumeric As Variant
' RUNDE 1
isANumber = True
xTremeNotNumeric = "zwei"
On Error Goto FehlerSpezial1
zweiUndPfirsich= 4 * xTremeNotNumeric
Goto weiter1
FehlerSpezial1:
If (Err = 13) Then
isANumber = False
Resume Next
End If
weiter1:
on Error goto FehlerGlobal
If (isANumber = False) Then
Msgbox |"| &Cstr(xtremeNotNumeric) & |"|& " is Not a number."
Else
Msgbox |"| &Cstr(xtremeNotNumeric) & |"|& " is a number."
End If
' RUNDE 2
isANumber = True
xTremeNotNumeric = 2
On Error Goto FehlerSpezial2
zweiUndPfirsich= 4 * xTremeNotNumeric
Goto weiter2
FehlerSpezial2:
If (Err = 13) Then
isANumber = False
Resume Next
End If
weiter2:
on Error goto FehlerGlobal
If (isANumber = False) Then
Msgbox |"| &Cstr(xtremeNotNumeric) & |"|& " is Not a number."
Else
Msgbox |"| &Cstr(xtremeNotNumeric) & |"|& " is a number."
End If
isANumber = true
Exit Sub
FehlerGlobal:
Print "Fehler:" & Error$ & "(" & Cstr(Err) & ") in Zeile:" & Cstr(Erl)
Exit Sub
End Sub
Javascript im Client ist deutlich schneller als andere Sprachen zur Validierung, weil die Loopbacks zum Server entfallen. Das habe ich bereits in einer Notes 5-Schulung mal gelernt. In unserem Unternehmen (30k Anwender) hat niemand Javascript abgeschaltet (wenn doch muss er es einschalten, kann man auch programmatisch triggern:
If session.GetEnvironmentValue("EnableJavaScript", True) = 0 Then
Call session.SetEnvironmentVar("EnableJavaScript", 1, True)
Msgbox "Diese Datenbank benötigt JavaScript-Unterstützung. " & Chr(10) _
& "Bitte starten Sie nun den Notes-Client neu, um die JavaScript-Unterstützung automatisch zu aktivieren.", _
48, "Neustart erforderlich"
Call SendCTRLF4
Exit Sub
End If
Einen Beispielcode für die Nummerneingabe findet ihr in eurer Lieblingssuchmaschine über den Suchsatz "You can force numbers-only entries" auf searchdomino.techtarget.com. Javascript hat ein paar Fußangeln im Client aber viele Dinge gehen NUR mit Javascript oder eben gar nicht. Und wer im Web 2.0-Zeitalter Javascript abschaltet der kann eh nichts mehr machen ;)
Die Idee des Tipps ist, eine Javascript-Funktion in einem kurzen Intervall (jede 10ms oder so) sich selbst aufrufen zu lassen solange man in dem zu prüfenden Feld steht. Sobald ein Zeichen ungleich numeric erscheint wird es wieder entfernt. Ist nicht perfekt, aber funktioniert.
Dafür brauchst Du doch nur einen ErrorHandler (der Dir scheinbar sowieso fehlt), der auf diesen Fall (dann ist Err = 184) (auch) reagiert.
Ein simples Beispiel (aus einem Code von mir vom letzten Wochenende):
Exit Function
ErrorRoutine:
Select Case Err
Case ErrNotAContainer: Resume Next
Case Else
Call ErrorHandler ("ValidateConfiguredFields")
End Select
Exit Function
Das mit Resume Next muss natürlich auch zur Situation passen - bei Dir wäre das offensichtlich eher ein Exit Function (oder was immer Du da treiben willst).
Bernhard