Das Notes Forum
Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: Selin am 10.06.02 - 14:55:30
-
Hallo,
ich hab ein Problem. Ich bin erst seit kurzer Zeit in der Programmierung von Notes. Ich habe eine Ansicht mit zwei Spalten. Name und Doc-ID.
In meiner Maske hab ich das Feld Name. Dort habe ich auch "versucht" einen DBLookup reinzuschreiben in der Eingabevalidierung, der rüft, ob der Name schon vergeben ist, wenn ja dann soll er eine Meldung ausgeben. Allerdings lässt er trotzdem zu, dass ich ein Dokument unter einem anderen Namen wie ein bereits bestehendes Dokument speichern kann.
Bitte um Hilfe >:(
-
Hallo Selin,
habe diesen Lotus Script Code (Dank nochmal an Axel) als Seriennummerüberprüfung in einer HardwareDB eingebaut. Bau diesen Code in Deine Maske in den QuerySave Event. Erstelle Dir eine sortierte Ansicht mit dem zu durchsuchendem Feld.
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As Notesdatabase
Dim view As NotesView
Dim doc As Notesdocument
Dim strValue As String
If Source.IsNewdoc Then
strValue = Source.FieldGetText("zu prüfender Feldname")
Set db = session.CurrentDatabase
Set view = db.GetView("sortierte Ansicht des Feldnamen")
Set doc = view.GetDocumentByKey(strValue, True)
If Not (doc Is Nothing) Then
Msgbox "Überprüfen Sie die Eingabe ",48,"Fehler: Dokument bereits vorhanden""
Continue = False
End If
End If
End Sub
Bei mir funzt das schön.
Gruss
Bubble
-
Hi Bubble,
danke erst einmal für deine Antwort
also irgendwie funktioniert das nicht.
Sollen hier in die Gänsefüsschen, die Werte rein??
muss ich den Spaltennamen in der Ansicht in setview setzen oder den eigentlichen Inhaltsnamen???
strValue = Source.FieldGetText("zu prüfender Feldname")
Set view = db.GetView("sortierte Ansicht des Feldnamen")
-
Hi,
hier das ganze für die Eingabevalidierung.
So muss die Formel in der Eingabevalidierung aussehen:
@If (@DbLookup("":"NoCache"; ""; "Ansichtname"; Feldname; 1 ) = Feldname; @Failure("Dokument bereits vorhanden"); @Success)
Die Werte für Ansichtname und Feldname musst du entsprechend anpassen. Wobei der Name der Ansicht in Anführungszeichen stehen muss und der Feldname nicht.
Die Ansicht muss in der ersten Spalte die Werte des Feldes enthalten und die Spalten muss sortiert sein.
Ich hoffe das hilft dir weiter.
Axel
-
Hallo,
laut Deiner Beschreibung heißt das Feld "Name" also
strValue = Source.FieldGetText("Name")
Neue sortierte Ansicht erstellen z.B. DocName
Spalte zeigt die Werte des Feldes Name z.B.
AAA
BBB
CCC
Set view = db.GetView("DocName")
Gruss
Bubble
-
Also ich habe in der Ansicht eine Spalte dich cih aufsteigend sortiert habe. Dann habe ich in der Maske bei Querysave den Code reingeschrieben. Aber ich kann immernoch Werte unter dem bereits vorhandenen Titel speichern...
Die Ansicht, in der geprüft wird sieht der USer aber nicht. Also es ist eine andere Ansicht, wo ich z.B. die Auflistung der Dokumnete habe. Daran kann es nicht liegen, oder?
-
Hallo Selin,
schick mir mal Deinen modifizierten Code zu.
Bubble
-
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As Notesdatabase
Dim view As NotesView
Dim doc As Notesdocument
Dim strValue As String
If Source.IsNewdoc Then
strValue = Source.FieldGetText("Subject")
Set db = session.CurrentDatabase
Set view = db.GetView("All2")
Set doc = view.GetDocumentByKey(strValue, True)
If Not (doc Is Nothing) Then
Msgbox "Überprüfen Sie die Eingabe ",48,"Fehler: Dokument bereits vorhanden"
Continue = False
End If
End If
End Sub
-
Die Ansicht, in der geprüft wird sieht der USer aber nicht. Also es ist eine andere Ansicht, wo ich z.B. die Auflistung der Dokumnete habe. Daran kann es nicht liegen, oder?
@Selin,
heißt das, das der User keine Rechte auf die Ansicht hat, oder das sie nur versteckt ist ? Ist die andere Ansicht, die du verwendest, entsprechend sortiert ?
Axel
-
Die Ansicht in der geprüft wird ist einfach eine Ansicht, die ich nicht anzeige. Also keine Rechtebeschränkung.
Die Ansicht, die der USer sieht ist auch nach dem Titel (Subject) sortiert wie die andere Ansicht
-
Wie ist Sie denn gespeichert - als:
All2
dann Set view = db.GetView("All2")
(All2)
dann Set view = db.GetView("(All2)")
($All2)
dann Set view = db.GetView("($All2)")
Zugriff auf die Ansicht in der Regel Leser oder höhere.
Bubble
-
All2
dann Set view = db.GetView("All2")
-
Gut
in der Ansicht die Spalte Subject
Sortierung -> Aufsteigend
Typ -> Standard
ohne irgendwelche Häckchen.
Bubble
-
Hi,
der Code sieht ok aus, wenn die Ansicht nach dem Subject-Feld sortiert ist auch ok. Dann sollte das Ganze eigentlich funktionieren.
Das einzigste was ich mir noch vorstellen kann, dass die Eingaben im Feld Subject, bei einem neuen Dokument, doch nicht 100% mit denen, von vorhandenen Doks übereinstimmen. Kann sich vielleicht ein Leerzeichen eingeschlichen haben, oder Groß-und Kleinschreibung?
Hast du den Code mal mit dem Debugger geprüft ?
Kannst du mir mal die Datenbank schicken ?
Axel
-
hab ich, funzt immer noch nicht
-
Hi,
schick mir mal die Datenbank, wenn das möglich ist. Vielleicht finde ich was.
Axel
-
Hi,
der Code sieht ok aus, wenn die Ansicht nach dem Subject-Feld sortiert ist auch ok. Dann sollte das Ganze eigentlich funktionieren.
Das einzigste was ich mir noch vorstellen kann, dass die Eingaben im Feld Subject, bei einem neuen Dokument, doch nicht 100% mit denen, von vorhandenen Doks übereinstimmen. Kann sich vielleicht ein Leerzeichen eingeschlichen haben, oder Groß-und Kleinschreibung?
Hast du den Code mal mit dem Debugger geprüft ?
Kannst du mir mal die Datenbank schicken ?
Axel
Schick mal die DB her.
Bubble
-
Hallo,
also bei mir funktioniert das Script einwandfrei.
Meine Frage:
Wie muss das Script lauten, damit bei jedem "Speichern" geprueft wird, ob ein Dokument mit dem entsprechenden Wert schon vorhanden ist.
Im Moment wird nur: "If Source.IsNewdoc" geprueft.
Gruss
Smajli