Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: gere am 28.07.06 - 10:24:02

Titel: Werte abprüfen, ob schon vorhanden
Beitrag 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


 
Titel: Re: Werte abprüfen, ob schon vorhanden
Beitrag von: Thomas Schulte am 28.07.06 - 10:57:02
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.
Titel: Re: Werte abprüfen, ob schon vorhanden
Beitrag von: Axel am 28.07.06 - 11:04:41
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
Titel: Re: Werte abprüfen, ob schon vorhanden
Beitrag von: gere am 28.07.06 - 11:57:11
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
Titel: Re: Werte abprüfen, ob schon vorhanden
Beitrag von: koehlerbv am 28.07.06 - 12:05:47
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
Titel: Re: Werte abprüfen, ob schon vorhanden
Beitrag von: gere am 28.07.06 - 12:14:55
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