Dokumente in Ansicht anzeigen, wo Feldinhalt falsch...

  • Hi zusammen,


    ich habe eine Maske mit einem Feld "PersonalNummer". Mit dieser PersonalNummer möchte ich in eine Ansicht und dort die Liste aller vorhandenen PersonalNummern vergleichen. Sollte eine PersonalNummer nicht in dieser Liste vorhanden sein, soll dieses Dokument in einer seperaten Ansicht "falsche Personalnummer" erscheinen...


    Kann mir da jemand helfen???


    Gruß
    Benny

  • Zitat


    Sollte eine PersonalNummer nicht in dieser Liste vorhanden sein, soll dieses Dokument in einer seperaten Ansicht "falsche Personalnummer" erscheinen...


    Was heisst nicht vorhanden sein? Du meinst, wenn das Feld Personalnummer in der Form nicht ausgefüllt wurde?


    @SELECT Form="alias" & Personalfeld=""

  • Das was du eben beschrieben hast brauch ich auch, aber diese Ansicht hab ich schon.Das ist meine Ansicht "fehlende PersonalNummer".


    Jetzt brauch ich aber noch eine Ansicht "falsche PersonalNummer":
    Hierbei muss aus dem Dokument der Inhalt des Feldes "PersonalNummer" genommen werden und in einer anderen Ansicht(wo alle PersonalNummern aufgelistet sind) schauen, ob die Nummer dort vorhanden ist. Wenn nicht dann soll ler dieses Dokument in der Ansicht "falsche Personalnummer" anzeigen...

  • Beim Abspeichern des Dokumentes schaust Du in einem Feld in der Ansicht mit den Pers.Nummern nach und setzt ein flag. Mit diesem Flag bestueckst Du Deine Selektionsformel fuer die beiden Ansichten.

  • Kannst dir auch einen Agent schreiben, der dir die fehlerhaften Dokumente in einen Ordner kopiert! Oder einen Agent, der das macht, was dnotes beschrieben hat. [edit] -> wahrscheinlich die beste lösung
    Nur eine Ansicht die das macht wird schwierig!

  • Ja die Ideen hab ich doch auch alle schon gehabt... mein Problem ist im moment wie ich in der Liste aller Personalnummern suche, ob die einzelnen PersNummern dort vorhanden sind...

  • Du hast eine fertige Ansicht mit Personalnummern? Warum machst du keine Eingabevalidierungsformel? Das ist ein 3-Zeiler in der Formelsprache. Dann lassen sich fehlende Personalnummern auch nicht speichern.


    Statt 1 Schritt machst du also lieber 5 + 5 + 5 ......... (endlos fortsetzbar? Schreibst extra Agenten und Ansichten? Zig Formeln statt einem 3zeiler? *kopfschüttelnübersovielunsinn*


    Ist es wirklich DAS was du WILLST?!


    1. Dokument mit einer Personalnummer wird gespeichert


    2. Irgendwann läuft ein Agent, der die zuvor eingetragene Personalnummer prüft (also genau das was eine Eingabevalidierungsformel schon längst hätte tun können)


    3. Der Agent ändert ein Feld im Dokument (z.B. PERROR="1") woraufhin das Dokument in der Ansicht "Falsche Personalnummer" auftaucht


    4. Jemand sieht das Dokument in der Ansicht "Falsche Personalnummer", öffnet es und ändert die Personalnummer, gleichzeitig wird das Feld PERROR natürlich wieder gelöscht damit das Dokument nicht mehr in der Ansicht "Falsche Personalnummer" sichtbar ist.


    5. Da die neu eingetragene Personalnummer ja wieder falsch sein kann (weil ja immer noch keine Prüfung im Dokument erfolgt) geht jetzt das Spiel wieder mit Schritt 1 los.

  • [quote]
    Du hast eine fertige Ansicht mit Personalnummern? Warum machst du keine Eingabevalidierungsformel?quote]


    Ja ich habe eine Ansicht mit allen Personalnummern und JA ich möchte das mit einer Formael machen...nur WIE sieht die aus???

  • Wenn ich das richtig verstanden habe, will er bereits fehlerhafte grade biegen


    Du brauchst doch eigentlich nur alle Dokumente durchlaufen und dann in der Gesamtübersicht (z.B. mit NotesView.getDocumentByKey) suchen. Die NotesView- Klasse hat aber noch andere Möglichkeiten.


    Um dann diesen Fehler zu vermeiden halte dich an CarstenH Posting


    Hier ist mal noch ein Beispiel aus der Hilfe (vorausgesetzt meine These zu Beginn dieses Postings stimmt!!!):


    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim dc As NotesDocumentCollection
    Set db = session.CurrentDatabase
    Set view = db.GetView( "By Category" )
    Set dc = view.GetAllDocumentsByKey("Spanish leather", False)


    Das in eine Schleife packen die über alle Dokumente läuft, Feld setzen! Danach ne temporäre Ansicht die nachdem Feld selektiert und dann die Dokumente ändern.

  • Script ist viel zu viel Aufwand im Vergleich zu einer simplen Eingabevalidierungsformel, habs mal sogar mal als 1-zeiler hingeschrieben:


    @IfError(@DbLookup("";"";"DeinePersonalnummernAnsicht";@ThisValue;1);@Failure("Diese Personalnummer ist nicht gültig.");@Success)


    Einfach in die Eingabevalidierung des Peronalnummernfeldes setzen und den Namen der Ansicht (in Hochkommas) einsetzen, fertig.


    Die Peronalnummernansicht muß nach den Personalnummern sortiert sein damit das @DbLookup funktioniert.


    Mehr Details zur Funktion findest du in der Designerhilfe.


    Wie schon gesagt - sogar nur 1 Zeile Formelsprache anstatt von Agenten, Ansichten und haufenweise Script.

  • Hab noch einen Fehler in meiner Formel gesehn, kann sie ja nicht wirklich praktisch testen;=)


    Richtig muß sie lauten:


    @If( @IsError( @DbLookup( ""; ""; "DeinePersonalnummernAnsicht"; @ThisValue; 1)); @Failure("Diese Personalnummer ist nicht gültig."); @Success)


    Um die bereits vorhandenen Dokumente nachträglich zu validieren kann man diese ebenfalls ganz simpel mit einem 1-Zeiler nachkontrollieren:


    Einfach eine Aktion in die Ansicht einbauen mit dem Befehl:


    @Command([ToolsRefreshSelectedDocs])


    Jetzt nur noch die zu prüfenden Dokumente markieren und Knöpfchen drücken =)

  • Die Datenbank besteht doch schon länger, dass heißt die ganzen Dokumente existieren bereits schon...es kommen gelegentlich mal ein paar dazu, dafür hilft die Eingabevalidieurng auf jeden fall...aber für die bereits bestehenden muss man ja irgendwo sehen welche eine falsche Personalnummer haben und somit nicht in der Personalnummer-Liste auftauchen...

  • Zitat


    dnotes schrieb:
    Bestehende Dokumente werden nach der Designaenderung doch durch das @Command([ToolsRefreshSelectedDocs]) upgedatet.


    Ich habe nirgend etwas gelesen, dass die Personalnummer automatisch vergeben wird. Die werden wohl in ein Textfeld eingetragen oder so! Dann muss schon mehr passieren als eine einfache Fehlermeldung. Je nach Anzahl kann man den Weg gehen, aber bei einer großen Anzahl an Dokumenten wird das ein gewurschtel. Aber das ist meine Meinung... :)

  • Hatte ich eigentlich schon beschrieben:



    Nachteil ist, daß dabei sobald eine fehlerhafte Nummer entdeckt wird die Validierung stoppt.

    Wenn das nicht reicht (weil zu viele Dokumente) kann man auch (kurzzeitig, für eine erste Nachprüfung) die Formel für Eingabevalidierung anders verwenden.


    Dazu trägt man die Formel einfach statt ins Feld Eingabevalidierung ins Feld Eingabeumsetzung leicht geändert ein:


    @If( @IsError( @DbLookup( ""; ""; "DeinePersonalnummernAnsicht"; @ThisValue; 1)); "("+@ThisValue+")"; @ThisValue)


    und läßt dann einmalig das oben beschriebene @Command([ToolsRefreshSelectedDocs]) laufen, dann haben alle falschen Personalnummern eine Klammer bekommen. Anschließend wieder die ursprüngliche Formel in die Eingabevalidierung einsetzen.


    Dauert denk ich mal nicht mal 5 Minuten die Prüfung mit beiden Änderungen. Und die fehlerhaften Personalnummern sind in der Ansicht sofort (durch die Klammer) zu erkennen.


    @ devileye1


    Nicht daß mich wer falsch versteht - ich habe nichts gegen Script im Allgemeinen, halt nur etwas komplexer in der Anwendung. Wenns mit ein bis zwei Zeilen Formelsprache doch um einiges simpler geht sehe ich den (vergleichsweise) enormen Aufwand nicht ein.


    Dein Beispielscript ist noch weit entfernt von einer einsetzbaren Version und der Topic-Poster hat kaum Ahnung von der Programmierung wie es aussieht, insofern wird er sicher ohne weitere Hilfe das Script nicht fertig bekommen. Daher meine freundlich gemeinte (und schon fertig funktionierende) Alternative.

  • CarstenH:


    Den Eindruck hast du nicht auf mich gemacht! Ich wollte nur mal sehen, wo das ganze hinführen könnte. Deswegen verfolge ich das hier etwas intensiver. Eigentlich habe ich keine Zeit ;)
    Aber letztendlich laufen die Lösungen aufs gleiche hinaus. Aber dein Weg ist dann wirklich etwas einfacher zu programmieren.


    Naja, Benni kann ja dann mal noch seine vorgehensweise fürs Archiv posten und dann sollten wir es doch haben, oder ;)

  • Ich habs jetzt mit der Lösung von CarstenH gemacht...mit den Klammern haben die Nummern was einheitliches und ich kann sie rausfiltern...


    Danke!!!


    P.S. Dieses Forum ist halt immer noch das aller Beste!!!