Autor Thema: @If + @ Contains  (Gelesen 40444 mal)

Offline Peter Mewes

  • Junior Mitglied
  • **
  • Beiträge: 58
  • Geschlecht: Männlich
@If + @ Contains
« am: 20.05.11 - 15:35:22 »
Hallo!

Ich versuche gerade die Werte einer Spalte / Ansicht, mit einem Fixwert zu vergleichen.

Also WENN Wert "Pete" & "Melecay" enthalten in Werte / Spalte DANN gib aus "User bereits vorhanden"

Dazu habe ich Mir die Werte besorgt und in ein Feld geschrieben:

@SetField ("list1" ; (@DbColumn("" ; "" : "******iles.nsf" ; "nach Nachnamen" ; 1) ));
@SetField ("list2" ; (@DbColumn("" ; "" : "******iles.nsf" ; "nach Vornamen" ; 1) ));

Das Auslese der Werte und importieren in Feld hat auch geklappt.

Dann wollte ich mit :

@If (@Contains(list1;"Melecay") & @Contains(list2;"Pete")) ; @Prompt ( "Peter Melecay ist bereits vorhanden")

Schritt zwei meiner Zielsetzung erreichen... ohne Erfolg. Finde in der Hilfe und im forum nix weiter, was mir meinen
Fehler aufzeigt.  Leider habe ich die Zusammenarbeit von @IF mit @Contains offenbar nicht ganz korrekt verstanden.

Zumal der Output der Contain Funktion ja auch bolean sein soll? Hm... :(

Pete
« Letzte Änderung: 27.05.11 - 16:08:10 von Peter Mewes »
Don't do it! ... the cake is a lie! ...

"Viele Menschen sind zu gut erzogen, um mit vollem Munde zu sprechen, aber sie haben keine Bedenken, es mit leerem Kopf zu tun." (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #1 am: 20.05.11 - 15:51:04 »
"ohne Erfolg" ist eine ganz miese Fehlerbeschreibung. Das gepostete Konstrukt lässt sich schon nicht speichern, weil der Else-Zweig eingespart wurde.

Bernhard

Offline Peter Mewes

  • Junior Mitglied
  • **
  • Beiträge: 58
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #2 am: 20.05.11 - 16:00:50 »
Hallo!

Die Tatsache, dass ich die Formel nicht speichern kann, umschreibt den Gesamterfolg schon gut! :)

Fehler : "Nicht genügend Argumente für @-Function"

Wie muss das Konstrukt denn Aussehen, wenn @Contains(list1;"Melecay") & @Contains(list2;"Pete") geprüft und
bei True irgendeinen Satz ausgeben soll, Beispielsweise: "Pete Melecay ist schon vorhanden." ?

Würdest du mir das:

@If (@Contains(list1;"Melecay") & @Contains(list2;"Pete")) ; @Prompt ( "Peter Melecay ist bereits vorhanden")

Evtl von der Syntax her umstellen, dass es koscha ist?

Peter
Don't do it! ... the cake is a lie! ...

"Viele Menschen sind zu gut erzogen, um mit vollem Munde zu sprechen, aber sie haben keine Bedenken, es mit leerem Kopf zu tun." (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #3 am: 20.05.11 - 16:03:47 »
Das steht in der DesignerHelp unter @If und hat mit @Contains nichts zu tun.

Bernhard

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: @If + @ Contains
« Antwort #4 am: 20.05.11 - 16:05:08 »
Siehe Bernhards Text. Dazu noch als Tipp, worauf Du Dein Beispiel kontrollieren solltest:

1) Stimmt die Anzahl der ";"?
2) Stimmt Anzahl der "(" mit der Anzahl der ")" überein?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: @If + @ Contains
« Antwort #5 am: 20.05.11 - 16:07:02 »
Was ist denn der Sinn und Zweck dieser Übung? Um nur die Meldung auszugeben, dass es den Herrn XY schon gibt, brauchst du die Werte nicht in Felder einzufügen.

Außerdem hinkt dein Konstrukt sowieso. Was passiert denn wenn es folgende User gibt?

Pete Smith
Jon Melecay

Dreimal darfst du raten.   ;)

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #6 am: 20.05.11 - 16:09:04 »
Danke, Martin - das hatte ich übersehen: Es fehlt ja nicht nur der Else, sondern auch schon der Then-Teil.

Axels Anmerkungen möchte ich mich ebenfalls anschliessen.

Bernhard

Offline nicht-schwimmer

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #7 am: 20.05.11 - 16:09:21 »
Hallo,

und ganz nebenbei prüft Deine Abfrage NICHT, ob ein "Peter Melecay" schon vorhanden ist, sondern ob irgendwer mit dem Vornamen 'Peter' und irgendwer mit dem Nachnamen 'Melecay' vorhanden ist !

Gruß
Jörg

Oops - da war einer schneller !

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: @If + @ Contains
« Antwort #8 am: 20.05.11 - 16:29:54 »
Ausserdem wird nicht berücksichtigt, dass der Lookup sich ja auch SELBST findet, nämlich dann, wenn das Dokument einmal gespeichert wurde... Des weiteren wäre so eine Abfrage richtigerweise in einer Feldvalidierung unterzubringen, und dort nimmt man kein @Prompt sondern ein @Failure.

Und in einer nagelneuen Datenbank laufen gleich 2 Lookups auf Fehler, weil ja noch keine Daten vorhanden sind, und der Fehlerfall wird gar nicht abgefangen...

Viele wenns und abers...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #9 am: 20.05.11 - 16:55:21 »
Es lohnt sich auch ein Blick auf diesen Thread: http://atnotes.de/index.php/topic,32010.0.html

HTH,
Bernhard

Offline Peter Mewes

  • Junior Mitglied
  • **
  • Beiträge: 58
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #10 am: 20.05.11 - 16:56:21 »
Soviel richtige und wichtige Kritik.

Also als Erklärung: Ich beginne gerade eine Ausbildung... bei NULL. Daher mangelt mir noch an weitblick.
Ich probiere gerade mehr rum, als dass ich vorhabe schon endgültige Varianten abzuliefern.

Das meine Suche an sich falsch aufgebaut ist, war mir zwar klar, imom bin ich aber grad an @IF und @Contains dran,
deswegen arbeite ich bewusst damit.

Ich habe die Formel inzwischen angepasst, Fehler lag in den Prompt argumenten:

@If (@Contains(list1;"Mew") & @Contains(list2;"Pet") ); @Prompt([Ok];"Name vorhanden"; "Pet Mew ist bereits in der Liste") ; @Prompt([Ok];"Name nicht vorhanden" ; "Pet Mew ist nicht in der List").

Funktioniert - Bedingt. Allerdings gibt er nun aus, dass Pet Mew sowohl in der Liste, als auch nicht in der Liste ist.

Danke für Link  Bernard.

Gruß

Pete

Don't do it! ... the cake is a lie! ...

"Viele Menschen sind zu gut erzogen, um mit vollem Munde zu sprechen, aber sie haben keine Bedenken, es mit leerem Kopf zu tun." (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #11 am: 20.05.11 - 17:02:25 »
Die Klammerung ist hinsichtlich @If immer noch falsch.

Du musst logisch denken, sonst wirst Du nie programmieren können. Die falschen @Prompt-Parameter (hat von uns auch keiner mehr gemerkt, weil schon gar nicht mehr hingeschaut) waren nur ein "Nebenkriegsschauplatz".

Bernhard

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: @If + @ Contains
« Antwort #12 am: 20.05.11 - 17:03:12 »
Du schliesst Deine @If- Klammer zu früh... die gehört HINTER die beiden Prompts...

@If (@Contains(list1;"Mew") & @Contains(list2;"Pet") ); @Prompt([Ok];"Name vorhanden"; "Pet Mew ist bereits in der Liste") ; @Prompt([Ok];"Name nicht vorhanden" ; "Pet Mew ist nicht in der List")

@If (@Contains(list1;"Mew") & @Contains(list2;"Pet") ; @Prompt([Ok];"Name vorhanden"; "Pet Mew ist bereits in der Liste") ; @Prompt([Ok];"Name nicht vorhanden" ; "Pet Mew ist nicht in der List") )
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Mewes

  • Junior Mitglied
  • **
  • Beiträge: 58
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #13 am: 20.05.11 - 17:23:14 »
Howdy,

danke abermals - Besonders Tode. Die Klammer hat gebracht, dass der Code nun geht. Wegen der regen Kritik, werde ich wohl
aber auf eine andere Methode zurückgreifen, sobald ich die IF / Contain geschichte verinnerlicht habe.

Pete
Don't do it! ... the cake is a lie! ...

"Viele Menschen sind zu gut erzogen, um mit vollem Munde zu sprechen, aber sie haben keine Bedenken, es mit leerem Kopf zu tun." (Oscar Wilde)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #14 am: 20.05.11 - 17:29:51 »
Pete, trenne @If von @Contains.

@If (Wenn; Dann; Sonst)
Und wenn Dein "Wenn" umfangreicher wird, musst Du natürlich auch die Klammern beherrschen:
@If ((Das ist so) & (Und auf jeden Fall auch so); Dann; Sonst)

@Contains (Wo; Was)

Und nochmals: Ohne logisches (und ruhiges) Denken bist Du in er Programmierung völlig erschossen. Dir können dann höchstens "Glückstreffer" gelingen.

Bernhard

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #15 am: 23.05.11 - 08:10:30 »
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.

Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Peter Mewes

  • Junior Mitglied
  • **
  • Beiträge: 58
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #16 am: 23.05.11 - 14:21:52 »
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?

Don't do it! ... the cake is a lie! ...

"Viele Menschen sind zu gut erzogen, um mit vollem Munde zu sprechen, aber sie haben keine Bedenken, es mit leerem Kopf zu tun." (Oscar Wilde)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #17 am: 23.05.11 - 14:35:35 »
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).
« Letzte Änderung: 23.05.11 - 14:41:43 von Peter Klett »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: @If + @ Contains
« Antwort #18 am: 23.05.11 - 14:59:11 »
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
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Mewes

  • Junior Mitglied
  • **
  • Beiträge: 58
  • Geschlecht: Männlich
Re: @If + @ Contains
« Antwort #19 am: 23.05.11 - 17:42:21 »
Hallo Namenvetter!

1. Lies Dir mal die Antwort #5 durch

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?

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

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)

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))
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.

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).

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.
« Letzte Änderung: 23.05.11 - 17:44:12 von PeteM »
Don't do it! ... the cake is a lie! ...

"Viele Menschen sind zu gut erzogen, um mit vollem Munde zu sprechen, aber sie haben keine Bedenken, es mit leerem Kopf zu tun." (Oscar Wilde)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz