Domino 9 und frühere Versionen > Entwicklung
input validation feld voll feld leer
Wipe:
Hi,
ist vielleicht simpel könnte aber gehen. luna Du sagtest derjenige der das Doc erstellt soll in Feld 1 was reinschreiben jedoch Feld 2 nicht.
habe in der hide wenn Option einfach Feld 2 verstecken wenn @IsNewDoc
Wenn Doc besteht dann zeigt er halt alles an.
Vielleicht ein Ansatz.
Gruss
Bubble
luna:
hallo bubble,
vielen dank fuer deine hilfe, aber das ist leider nicht so einfach. nochmal zum ganzen konzept, aber sehr vereinfacht:
1.) in dieser DB haben 3 leute zugriff, jeder aber nur in seinem bereich (orange, blau, pink).
person 1 sieht per hide/when alle editierbaren felder im bereich orange, alle felder im bereich pink und blau sind per hide/when versteckt, dort sieht er nur die computed for display felder.
person 2 sieht per hide/when computed for display felder im bereich orange, im bereicht blau sieht er editierbare felder, die er eben editieren kann, und im bereich pink sieht er wieder nur computed for display felder.
person 3 sieht computed for display felder fuer orange und blau, im bereich pink hat er editierbare felder.
was ich will:
person 1 soll im bereich orange validierungsfehler bekommen, wenn er seine orangen felder nicht ausgefuellt hat. soweit klappt ja alles.
person 2 soll im bereich blau fehler bekommen, wenn er die felder im bereich blau nicht ausgefuellt hat. aber nur die !
person 3 soll im bereich pink eine fehlermeldung kriegen, wenn er in diesem bereich ein feld leer laesst.
person 2 soll aber keine fehlermeldung kriegen, wenn ein feld im bereich pink leer ist, das interessiert ihn in diesem moment noch nicht. aber die felder im bereich pink werden ihm ja eh nur computed for display angezeigt.
und alle personen sollen im feld "action history" reinschreiben, was sie getan haben. ist ueber lotus script geregelt.
also, person 1 krieg ich hin, aber person 2 und 3 nicht.
gruss,
daniela :P
Axel:
Hi Daniela,
versuch doch mal die Validierung im QuerySave-Event der Maske.
Zur Erkennung welche Rolle gesetzt ist habe ich vor einiger Zeit diese Funktion erstellt:
Function RoleEnabled(sRole As String) As Integer
Dim vResult As Variant
vResult = Evaluate(|@IsMember("| & sRole & |"; @UserRoles)|)
If vResult(0) = 1 Then
RoleEnabled = 1
Else
RoleEnabled = 0
End If 'If vResult(0) = 1
End Function
Binde diese mit ein und versuch dann mal folgenden Code im QuerySave-Event:
...
If RoleEnabled("[Orange]") Then
If Source.FieldGetText("Feld1") <> "" Then
Messagebox "Feld1 darf nicht leer sein"
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
If RoleEnabled("[Blau]") Then
If Source.FieldGetText("Feld2") <> "" Then
Messagebox "Feld2 darf nicht leer sein"
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
If RoleEnabled("[Pink]") Then
If Source.FieldGetText("Feld3") <> "" Then
Messagebox "Feld3 darf nicht leer sein"
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
...
Ist aus dem Kopf entstanden sollte aber funktionieren. Ich führe meine Validierungen in der Regel im Querysave-Event durch, da ich hier mit Script mehr Möglichkeiten habe.
Gruss
Axel
luna:
hallo axel,
vielen dank fuer deine formel.
ich hab das jetzt bei mir implementiert, aber ich kenn mich halt leider zuwenig aus, dass ich das gross veraendern koennte.
ich habs so:
hab ein RoleEnabled object mit dieser formel:
Function RoleEnabled(sRole As String) As Integer
Dim vResult As Variant
vResult = Evaluate(|@IsMember("| & sRole & |"; @UserRoles)|)
If vResult(0) = 1 Then
RoleEnabled = 1
Else
RoleEnabled = 0
End If 'If vResult(0) = 1
End Function
und im query save steht drin:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If RoleEnabled("[orange]") Then
If Source.FieldGetText("customer") <> "" Then
Messagebox "Feld1 darf nicht leer sein"
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
If RoleEnabled("") Then
If Source.FieldGetText("cell_availab") <> "" Then
Messagebox "Feld2 darf nicht leer sein"
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
If RoleEnabled("[pink]") Then
If Source.FieldGetText("production") <> "" Then
Messagebox "Feld3 darf nicht leer sein"
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
End Sub
da hab ich jetzt aber schon das erste problem:
wenn ich mir die rolle "orange" gebe, und alle felder im bereich orange ausfuelle, dann das dokument abspeichere, krieg ich diese fehlermeldung:
"feld1 darf nicht leer sein".
feld1 ist bei mir das feld "customer". hab ich ja auch so definiert, im script.
problem ist nur, dass ich ja im feld1 (customer) was reingeschrieben hab. er schliesst und speichert mir das dokument zwar, aber trotzdem gibt er diesen fehler aus. das macht er uebrigens jedesmal, wenn ich das dokument dann wieder oeffne und schliesse.
gebe ich mir die rolle "blau" ohne die rolle orange, dann ist es noch komischer:
ich editiere das bestehende dokument, schreibe in das feld2 (cell_availab) nix rein, er laesst mich ohne probleme speichern (auch ohne die obige meldung). sobald ich aber in das feld2 was reinschreibe, und nochmal speichere, dann krieg ich die meldung:
feld2 darf nicht leer sein.
also irgendwas scheint da noch verkehrt rum zu sein.
wie gesagt, ich kenn mich mit script leider ueberhaupt nicht aus, drum ist das fuer mich ziemlich kompliziert. das mit der formel haette mir schon besser gefallen, waere einfacher gewesen. geht halt nur leider nicht.
vielleicht findest du ja noch einen fehler in dem script?
danke und gruss,
daniela
Axel:
Hi Daniela,
ich heut auf beiden Augen taub und beiden Ohren blind. :-/
Das kann auch so nicht gehen. >:(
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If RoleEnabled("[orange]") Then
If Source.FieldGetText("customer") = "" Then
Messagebox "Feld1 darf nicht leer sein"
Continue = False
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
If RoleEnabled("") Then
If Source.FieldGetText("cell_availab") = "" Then
Messagebox "Feld2 darf nicht leer sein"
Continue = False
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
If RoleEnabled("[pink]") Then
If Source.FieldGetText("production") = "" Then
Messagebox "Feld3 darf nicht leer sein"
Continue = False
Exit Sub
End If
' Hier können weitere Validierungen stehen
End If
End Sub
Der Vergleichsoperator war falsch. Ausserdem hab ich noch "Continue = False" eingefügt. Das verhindert, wenn das Feld leer ist, ein Speichern. Den Text bei der Messagebox musst du deinen Gegebenheiten anpassen.
Probier's jetzt mal.
Axel
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln