Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: gere am 28.07.06 - 10:24:02
-
Hallo zusammen,
Stehe gerade vor einem kleinen Problem:
Ich habe eine Tabelle mit verschiedenen Werkzeugen. Jedes Werkzeug hat eine eigene Artikelnummer, die nur einmal in der Datenbank vorkommen darf. Ich möchte jetzt also bei Anlegen eines neuen Werkzeugs abprüfen, ob die eingegebene Artikelnummer schon in der Datenbank existiert, um Duplikate zu vermeiden.
In der Eingabevalidierung des Feldes "Artikelnummer" in der Maske habe ich folgende Formel hinterlegt:
ArticleNumberNew := @GetField("ArticleNumber");
ArticleNumberExists := @DbColumn("";"":"";"EquipmentByName";3);
@If(@IsMember(ArticleNumberNew;ArticleNumberExists);@Failure("Ein Werkzeug mit dieser Artikelnummer ist bereits vorhanden");@Success)
Allerdings funktioniert das nicht. Also hab ich es in der Aktion "Speichern" mit folgender Formel versucht:
ArticleNumberNew := @GetField("ArticleNumber");
ArticleNumberExists := @DbColumn("";"":"";"EquipmentByName";3);
@If(@IsMember(ArticleNumberNew;ArticleNumberExists);@Prompt([OK];"Ein Werkzeug mit dieser Artikelnummer ist bereits vorhanden");@Success)
Dann kommt zwar die Meldung, wenn man eine Artikelnummer ein zweites mal vergeben will, aber sobald man ein vorhandener Datensatz überarbeitet und erneut speichern will, läßt Notes das nicht zu. Kann ich das irgendwie mit @IsNewDocument o. ä. lösen? Wenn ja wie, kann mir da evtl jemand auf die Sprünge helfen?
Danke, Gere
-
Zwei Möglichkeiten:
Nummer 1. Du gibst nach der ersten Prüfung ein Flagfeld mit und machst die Prüfung nur dann wenn das Flagfeld nicht existiert bzw. nicht den richtigen Wert hat.
Nummer 2. Du holst dir die DOCUNID des Documents das dir der dbcolumn zurückgegeben hat und vergleichst ob dieser und der des aktuellen Dokuments identisch sind.
Alle anderen Konstrukte sind nicht zuverlässig genug.
-
Ich würde das Ganze so realisieren.
Du lässt die Eingabe einer Artikel-Nummer nur bei einem neuen Dokument zu (Stichworte: berechnetes Feld, Hide-When - Formeln).
Bei Speichern prüfst du dann, ob es a.) ein neues Dokument ist (@If(@IsNewDoc....)) und b.) ob es die eingegebene Artikel-Nummer bereits gibt.
Axel
-
Ich habs jetzt einfach so gemacht:
ArticleNumberNew := @GetField("ArticleNumber");
ArticleNumberExists := @DbColumn("";"":"";"EquipmentByName";3);
@If((@IsMember(ArticleNumberNew;ArticleNumberExists) & @IsNewDoc);@Failure("Ein Prüfmittel mit dieser Materialnummer ist bereits vorhanden");@Success)
Im Grunde funktioniert es nun auch, aber seltsamerweise kommt die Fehlermeldung beim Speichern nun 2x hintereinander !?? Hab die if-Anweisung mit & schon in Klammern gefasst, weil ich dachte dass jedes Argument dann die Meldung auslöst, aber Pustekuchen!
Gruss gere
-
Hast Du die Formel eventuell sowohl in der Eingabeumsetzung als auch der Validierung drin? Dein Code wirft auf jeden Fall nur eine Meldung.
Weiterhin: Und wie stellst Du sicher, dass nicht jemand bei einem bestehenden Dokument die Nummer auf einen anderen, bereits bestehenden ändert?
Bernhard
-
Hallo Bernhard,
Die Formel steht nur in der Eingabevalidierung drin, sonst nirgendwo, deshalb bin ich auch über die doppelte Meldung verwundert *kopfkratz*.
Folgendermaßen stell ich sicher, dass niemand den Wert ändert:
Ich hab 2 Felder, einmal ArticleNumber und ArticleNumberDsp. ArticleNumber ist versteckt beim Lesen, ArticleNumberDsp im Edit-Modus. ArticleNumberDsp übernimmt den Wert aus dem Feld ArticleNumber (mit @GetField...). Das Feld ArticleNumber wird versteckt, sobald ArticleNumberDsp gefüllt ist. So kann die Nummer nachträglich nicht mehr verändert werden.
Gere