Eindeutiger Feldwert

Hi Leuts

Hab ein formular mit einem feld (zb IP Adresse) dessen wert nur einmal existieren darf in der db.

Meine abfrage beim speichern mit einer dblookup funktioniert eigentlich gut, beim neu erstellen von dokumenten motzt notes wenn die IP im feld bereits existiert.
beim erneuten editieren und speichern des formulars, wird die abfrage ausgelassen, da sonst die ip als bereits vergeben erkannt wird, da ja das zu editierende dokument bereits existiert.

Wird nun die IP beim editieren verändert, findet auch keine eindeutigkeitsabfrage mehr statt, was natürlich nicht akzeptiert werden kann. Die neue IP wird gespeichert auch wenn diese bereits existiert :frowning:

hat jemand ein tip wie man die eindeutigkeitsabfrage auch beim erneuten speichern aktivieren kann, jedoch das eigene dokument von der eindeutigkeitssuche ausgeschlossen wird?

thx, flexion

Hallo flexion,

du könntest folgendes probieren (in script):
Baue in die Form ein Feld ein, das die UniqueID des Dokumentes erhält ( @text(@DocumentUniqueID) )(mach ich übrigens in jeder Form, weil man das immer wieder brauchen kann),
Lass zum Prüfen dann über deine DB eine Volltextsuche laufen, nach dem Motto, Select all where Field UNID actual UNID. Anschließend kannst du mit einer Forall Schleife alle Dokumente der NotesDocumentCollection die du zurückgeliefert bekommst überprüfen.
Alternativ dazu kannst du einen View aufnehmen, der deine Form enthält und nach dem ID Feld sortiert ist. Den Liest du ein un klapperst einfach der Reihe nach alle Dokumente ab. Das Dokument mit der gleichen ID schliesst du durch einen einfachen Wertevergleich von der Überprüfung aus.
Das ganze baust du im Querysave event ein und triggerst es über eine Variable die du in der Form als Global definierst und die beim Querychange event den „alten“ Wert des IP Feldes übernimmt.
Damit stellst du sicher, das du nur dann prüfst, wenn sich der Feldwert tatsächlich geändert hat.
Wichtig ist, das du die Daten die du im Querysave prüfst nicht über die Backend Klassen holst, sondern über den Frontend (uidoc.FieldGetText(„dasfeld“)) weil du sonst bei einem neuen Dokument in schwierigkeiten gerätst. Das Backend existiert dann nämlich noch nicht.

HTH
Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke Thomas!

Hab dein tip befolgt und was zusammengebastelt :wink:

thx! flexion