Domino 9 und frühere Versionen > ND8: Entwicklung

@If + @ Contains

<< < (4/22) > >>

bikerboy:
So jetzt noch mein unqualifizierter Beitrag.

Du solltest gegen Listen nicht mit einem @Contains , sondern mit einem @IsMember prüfen. @Contains macht ja prüft ja nur ob in einem deiner Inhalte ein "Pet" enthalten ist. Und nicht ob nur "Pet" enthalten ist.

Desweiteren würde ich eine Spalte bauen, damit du nicht 2 @dbColumn los treten musst. Das spart noch ein Quäntchen Performance.

Peter Mewes:
Hallö. Also mein Amateur-Duplikationstest geht soweit:

@SetField ("list1" ; (@DbColumn("" ; "" : "xxxx.nsf" ; "vDoppelpreuf" ; 1) ));
@SetField ("list2" ; (@DbColumn("" ; "" : "xxxx.nsf" ; "vDoppelpreuf" ; 2) ));
@SetField ("f_list3" ; (@DbColumn("" ; "" : "xxxx.nsf" ; "vDoppelpreuf" ; 3) ));
@Command([FileSave]);
@If (@Contains(list1; _name) & @Contains(list2;_vorname) & @Contains(f_list3;_straße); @Prompt([Ok];"¿Doppeltes Profil?"; "Entweder das Dokument ist leer, oder es wurden weitere Profile mit ähnlichen Eigenschaften gefunden.") ; @Prompt([Ok];"! Profil Unique !" ; "Es scheint, als ob das Profil nicht doppelt vorhanden ist.") )

Ist zwar nicht wasserdicht, aber immerhin. Wie meintest du das mit einer Spalte um mehrere Dbcolumns zu vermeiden?

Peter Klett:
1. Lies Dir mal die Antwort #5 durch
2. Warum speicherst Du das Dokument, bevor Du geprüft hast, ob es schon so eines gibt?
3. Mit @DBColumn wirst Du irgendwann ein 32-k-Problem bekommen

Mein Vorschlag: Bau Dir eine Ansicht, in der in der ersten sortierten Spalte alle Werte, die Du prüfen willst, mit Trennzeichen getrennt stehen (z.B. Hans#Meier#Hauptstraße 1)

Gib in der zweiten Spalte die UniversalID aus (@Text (@DocumentUniqueID))

Lass Dir mit @DBLookup und dem zusammengesetzten Schlüssel die zweite Spalte ausgeben

Entferne aus dem Ergebnis die UniversalID des gerade geöffneten Dokuments

Ist das Ergebnis dann nicht leer, hast Du einen Konflikt

Edit: @IsError ist Dein Freund bei dem @DBLookup. Warum gibst Du eine Fehlermeldung aus, die sagt, dass es ähnliche Dokumente gibt? Du überprüfst doch nur die Gleichheit (allerdings sinnfrei).

Tode:
Also davon abgesehen, dass dieser Code nichts tut, als eine Meldung rauszugeben (wie wäre es mit dem verhindern des speicherns, o.ä.), ist die Prüfung -wie bereits mehrfach erwähnt- vollkommen sinnlos.

Nehmen wir den Fall, dass Deine Daten so aussehen:

Hans Wurst, Friedrich-Metzgerstrasse 5
Tido Test, Teststrasse 11
Maria Müllermeister, Hauptstrasse 12

Rate mal, was passiert, wenn Du einen
Tido Müller, Metzgerstrasse 5
anlegen willst !!!

Müller ist Bestandteil von  Wurst, Test, Müllermeister -> Contains ist true
Tido ist Bestandteil von Hans, Tido, Maria -> Contains ist true
Metzgerstrasse ist Bestandteil von Friedrich-Metzgerstrasse 5, Teststrasse 11, Hauptstrasse 12 -> Contains ist true

Du erhälst die Meldung, dass es den Herrn schon gibt...
Erstens prüft contains nur Teilzeichenketten (@Contains( "Müllermeister" ; "Müller" ) = @True !!!! ) und zweitens prüfst Du nirgends, ob die Treffer alle im gleichen Dokument vorkommen...

So wird das nichts...

Tode

Peter Mewes:
Hallo Namenvetter!


--- Zitat von: Peter Klett am 23.05.11 - 14:35:35 ---1. Lies Dir mal die Antwort #5 durch
--- Ende Zitat ---

Geschehen und bereits geantwortet, dass meine Fachkompetenz imom nur für dieses Konstrukt reicht.


--- Zitat ---2. Warum speicherst Du das Dokument, bevor Du geprüft hast, ob es schon so eines gibt?
--- Ende Zitat ---

War nicht aktuell, sorry. Aktuell bei Querysave:

@SetField ("list1" ; (@DbColumn("" ; "" : "xxxx.nsf" ; "vDoppelpreuf" ; 1) ));
@SetField ("list2" ; (@DbColumn("" ; "" : "xxxx.nsf" ; "vDoppelpreuf" ; 2) ));
@SetField ("f_list3" ; (@DbColumn("" ; "" : "xxxx.nsf" ; "vDoppelpreuf" ; 3) ));
@If (@Contains(list1; _name) & @Contains(list2;_vorname) & @Contains(f_list3;_straße); @Prompt([Ok];"¿Doppeltes Profil?"; "Es scheint bereits ein Profil für diesen Mitarbeiter zu geben. Es wurde eine Email an den zuständigen Admin versandt, um das Problem zu überprüfen.") ; @Prompt([Ok];"Profil neu angelegt" ; "Das Profil wurde gespeichert.") );
@If (@Contains(list1; _name) & @Contains(list2;_vorname) & @Contains(f_list3;_straße) ; @MailSend( "Admin" ; "" ; "" ; "Vermeintlich doppeltes Profil erkannt" ; " Bitte den Link im Anhang prüfen und gegebenenfalls das Doppelte Profil löschen oder bearbeiten."  ; "" ; [IncludeDoclink]  ) ; "" );

--> Bin gerade dabei etwas zu improvisieren, dass den Querysave abbricht, bei Doppelten Dokumenten. Finde aber das Formel-Gegenstück zu continue = False nicht.

 Anhang: Habe mit @return / @ false / @ failure experimentiert. Ohne Erfolg. Werde nun auf die Dblookup-Variante von Peter umsteigen.


--- Zitat --- 3. Mit @DBColumn wirst Du irgendwann ein 32-k-Problem bekommen
--- Ende Zitat ---

Das klingt ungut. Hoffe wird in meiner Testdatenbank aber so schnell nicht passieren ( 10 Profile? ). Habe es aber im Hinterkopf für später!



--- Zitat ---Mein Vorschlag: Bau Dir eine Ansicht, in der in der ersten sortierten Spalte alle Werte, die Du prüfen willst, mit Trennzeichen getrennt stehen (z.B. Hans#Meier#Hauptstraße 1)
--- Ende Zitat ---

Muss ich mich erstmal belesen wie sowas geht. Bisher weiss ich nur, wie man einer Spalte Werte aus einem Feld zuweist.

Anhang: Success


--- Zitat ---Gib in der zweiten Spalte die UniversalID aus (@Text (@DocumentUniqueID))
--- Ende Zitat ---
Ich verstehe wo der Zug hinfährt!


--- Zitat ---Lass Dir mit @DBLookup und dem zusammengesetzten Schlüssel die zweite Spalte ausgeben.
Entferne aus dem Ergebnis die UniversalID des gerade geöffneten Dokuments.
--- Ende Zitat ---

Oright! Sofort wenn ich die Hilfe gegeißelt habe bzgl zusammengesetzer Wert in einer Spalte.

Ist das Ergebnis dann nicht leer, hast Du einen Konflikt


--- Zitat --- Edit: @IsError ist Dein Freund bei dem @DBLookup. Warum gibst Du eine Fehlermeldung aus, die sagt, dass es ähnliche Dokumente gibt? Du überprüfst doch nur die Gleichheit (allerdings sinnfrei).

--- Ende Zitat ---

Schon verstanden. Auch @ Tode. Das Problem, dass gemixte Daten auch einen "fälschlichen" Konflikt erzeugen ist mir bekannt. Aber bisher die Lösung, die dem was ich möchte am nächsten kommt. Bin wie gesagt noch nicht so weit. Genaugenommen erst seit 2 Wochen.


Anhang: Habe die Daten in Spalte verknüpft. UniqueID wird auch in Spalte Zwei ausgegeben. Muss jetzt aber los. Mir ist eben auch noch
eine Variante mit DBlookup aufgefallen, die ne Menge arbeit sparen würde, die ich vielleich tsogar hinbekomme.

So far großes Danke schonmal.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln