0

Ansicht nach Suchkriterien

Hallo Zusammen,

ich habe aktuell für meine Kontakte ein Suchfeld als Textfeld und eine Ansicht die alle Kontakte anzeigt deren Namen mit dem Text im Suchfeld übereinstimmt.

Jetzt würde ich gerne noch ein Mehrfachauswahlfeld erstellen mit Optionen wie Mail-Adresse, Straße, Ort, etc. und je nach Auswahl sollen die einzelnen optionen zusätzlich als Suchkriterium aufgenommen werden.

Hat jemand eine Idee wie ich das umsetzen kann?

Über eine Rückmeldung freue ich mich sehr.

20 Antworten

null
    • Heinrich Frey Maschinenbau GmbH
    • Christian_Rott
    • vor 5 Tagen
    • Gemeldet - anzeigen

    Hallo  , ich habe bei meinen Kontakten ein Formel Feld hinterlegt(FORMEL_SUCHE). In denen ich folgende Felder wiedergebe: Firma + " " + Zusatz + " " + Vorname + " " + Nachname + " " + Strasse + " " + Ort +
    " " +
    PLZ +
    " " +
    'Land (KÜRZEL 2 STELLEN)' +
    " " +
    EMail

    und in der Ansicht habe ich dann folgenden Code:

    let myS := lower(DEIN TEXTFELD);
    (select Kunden)[contains(lower(Name + Vorname + Firma + FORMEL_SUCHE
        ), myS)]

     

    Dann kannst du über die Eingabe in deinem F`Textfeld die gewünschten Einträge suchen.

    Hoffe es hilft dir

      • mail.9
      • vor 5 Tagen
      • Gemeldet - anzeigen

      hallo  

      Erstmal danke für deine Antwort. 
      so ähnlich habe ich es momentan auch geregelt nur ist dann das Ergebnis, wenn ich nach zb „Frank“ Suche, kommen alle Kunden die Frank heißen, alle die in Frankfurt wohnen und alle die in der Frankenstrasse wohnen. Deshalb suche ich eine Möglichkeit über eine Mehrfachauswahl die Kriterien selbst zu bestimmen. 

      • Heinrich Frey Maschinenbau GmbH
      • Christian_Rott
      • vor 5 Tagen
      • Gemeldet - anzeigen

       Ah okay das stimmt an so einer Lösung wäre ich auch interessiert dann schaue ich mal ob es hier im Forum eine Lösung gibt

    • Torsten_Stang.1
    • vor 3 Tagen
    • Gemeldet - anzeigen

    Hallo,

    eine Idee, die glaube ich hier im Forum schonmal so ähnlich gepostet wurde:

    let my := this;
    let mySuche := (select Kontakte);
    if Name then
        mySuche := mySuche[contains(lower(Name), lower(my.Name))]
    end;
    if 'Mail-Adresse' then
        mySuche := mySuche[contains(lower('Mail-Adresse'), lower(my.'Mail-Adresse'))]
    end;
    if 'Straße' then
        mySuche := mySuche[contains(lower('Straße'), lower(my.'Straße'))]
    end;
    mySuche
    

    das kann um beliebige Felder nach gleichem Prinzip erweitert werden...

      • mail.9
      • vor 3 Tagen
      • Gemeldet - anzeigen

      Hallo  , danke für die Antwort. Allerdings kann ich hier dann auch immer nur ein Such-Parameter wählen und nicht mehrere. Vielleicht ist das aber die einzige Lösung.

      • Torsten_Stang.1
      • vor 3 Tagen
      • Gemeldet - anzeigen

       Ähm, nein - mein Skript würde, wenn z.B. die Suchfelder "Name" und "Straße" etwas beinhalten nach Einträgen suchen, auf die beide Kriterien zutreffen - also alle Einträge, deren Name den Inhalt vom Suchfeld "Name" UND deren Straße den Inhalt des Suchfelds "Straße" enthält...

      • mail.9
      • vor 3 Tagen
      • Gemeldet - anzeigen

       ja das stimmt, allerdings brauch ich dann mehrere Suchfelder. Würde es gerne über ein einziges Suchfeld machen.

      • Torsten_Stang.1
      • vor 3 Tagen
      • Gemeldet - anzeigen

       Ahja, dann vielleicht so:

       

      let my := this;
      let mySuchfeld := lower(Suchfeld);
      let mySuche := (select Kontakte);
      if chosen(my.MAF, "Name") then
          mySuche := mySuche[contains(lower(Name), mySuche)]
      end;
      if chosen(my.MAF, "Mail-Adresse") then
          mySuche := mySuche[contains(lower('Mail-Adresse'), mySuche)]
      end;
      if chosen(my.MAF, "Straße") then
          mySuche := mySuche[contains(lower('Straße'), mySuche)]
      end;
      mySuche
      
      • mail.9
      • vor 3 Tagen
      • Gemeldet - anzeigen

       Das bringt leider das selbst ergebnis.

      Habe es jetzt mit einem normalen Auswahlfeld probiert:

      if 'Suche [Kontakte]' = null then

      'Verknüpfungen'.Kontakte

      else

      let x := text('Suche [Kontakte]');

      if myS = 0 then

      'Verknüpfungen'.Kontakte['Name 1' like x or 'Name 2' like x]

      end;

      if myS = 1 then

      'Verknüpfungen'.Kontakte['Straße + Nr.' like x]

      end;

      if myS = 2 then

      'Verknüpfungen'.Kontakte[Stadt like x]

      end;

      if myS = 5 then

      'Verknüpfungen'.Kontakte[Nr like x]

      end;

       

      end

      Hier ist myS das Auswahlfeld. Funktioniert aber irgendwie auch nicht.

      • Torsten_Stang.1
      • vor 3 Tagen
      • Gemeldet - anzeigen

       öhm, ja, ich hatte auch einen kleines "Böckchen" im Code, sorry... 

      let my := this;
      let mySuchfeld := lower(Suchfeld);
      let mySuche := (select Kontakte);
      if chosen(my.MAF, "Name") then
          mySuche := mySuche[contains(lower(Name), mySuchfeld)]
      end;
      if chosen(my.MAF, "Mail-Adresse") then
          mySuche := mySuche[contains(lower('Mail-Adresse'), mySuchfeld)]
      end;
      if chosen(my.MAF, "Straße") then
          mySuche := mySuche[contains(lower('Straße'), mySuchfeld)]
      end;
      mySuche
      
      • Ninox-Professional
      • planoxpro
      • vor 3 Tagen
      • Gemeldet - anzeigen

       

      Die Zeile sollte vermutlich lauten

      mySuche := mySuche[contains(lower(Name), mySuchfeld)]

      Wenn ich es richtig sehe, würdest du bei der zweiten Abfrage aber kein korrektes Ergebnis bekommen, weil du das Array in der ersten schon auf Name gefiltert hast.

      • Torsten_Stang.1
      • vor 3 Tagen
      • Gemeldet - anzeigen

       ja, bin mit den Variablen im Trockenen etwas durcheinander geraten - sollte aber jetzt korrekt sein.

      Wenn ich es richtig sehe, würdest du bei der zweiten Abfrage aber kein korrektes Ergebnis bekommen, weil du das Array in der ersten schon auf Name gefiltert hast.

      Verstehe ich nicht? Im ersten (optionalen) Durchlauf filtere ich nach "Name", im zweiten  nach "Mail-Adresse"?

      Der TE möchte ja, dass er einen Suchtext eingibt und per MAF auswählt, in welchem Feldern dieser Suchtext zum Tragen kommt.

      • Ninox-Professional
      • planoxpro
      • vor 3 Tagen
      • Gemeldet - anzeigen

       Ja, aber du speicherst das Ergebnis ja wieder in der Variable mySuche. Bei der zweiten Abfrage hast du also nur noch Datensätze, die den Suchbegriff im Namen haben. Alleanderen wurden rausgefiltert. Oder habe ich da jetzt 'nen Denkfehler?

      • Torsten_Stang.1
      • vor 3 Tagen
      • Gemeldet - anzeigen

       es ist ja gewünscht, dass nur Einträge angezeigt werden, bei denen der Suchbegriff auf alle ausgewählten Kriterien zutrifft... 

      • Ninox-Professional
      • planoxpro
      • vor 3 Tagen
      • Gemeldet - anzeigen

       Also, dass der Suchstring ggf. in Name UND E-Mail UND Straße vorkommt? Okay, das hatte ich anders interpretiert.

    • Ninox-Professional
    • planoxpro
    • vor 3 Tagen
    • Gemeldet - anzeigen

    Vielleicht in dieser Art?

    let me := this
    let myS := lower(Suchfeld);
    select Kontakte where if chosen(me.MAF, "Name") then contains(lower(Name), myS) end or if chosen(me.MAF, "Ort") then contains(lower(Ort), myS) end or if chosen(me.MAF, "Strasse") then contains(lower(Strasse), myS) end

    Wobei DMAF für den Namen des Mehrfachauswahlfeldes steht.

      • mail.9
      • vor 3 Tagen
      • Gemeldet - anzeigen

       ja das würde wieder nur funktionieren wenn man nur ein Auswählfeld wählt. Will man Straße und Ort als Suchparameter haben würde es wieder nicht funktionieren. 

      Aber vielleicht mache ich ein normales Auswahlfeld.

      • Ninox-Professional
      • planoxpro
      • vor 3 Tagen
      • Gemeldet - anzeigen

       

      Gedacht war es eigentlich für ein Mehrfachauswahlfeld. Ich bin mir aber selbst nicht sicher, ob ich Syntax und Reihenfolge korrekt angegeben habe.

      Ich arbeite in solchen Fällen der Übersichtlichkeit halber aber auch gerne mit einer Kennung, die ich je nach Auswahl zusammenbaue:

      let myS := Suchfeld;
      let myK := "";
      myK := myK + if chosen(MAF, 1) then "X" else "_" end;
      myK := myK + if chosen(MAF, 2) then "X" else "_" end;
      myK := myK + if chosen(MAF, 3) then "X" else "_" end;
      switch myK do
         case "X__": select Kontakte where Name like myS
         case "XX_": select Kontakte where Name like myS or Email like myS
         case "X_X": select Kontakte where Name like myS or Strasse like myS
         case "_XX": select Kontakte where Email like myS or Strasse like myS
         case "XXX": select Kontakte where Name like myS or Email like myS or Strasse like myS
         default: select Kontakte
      end

       Wenn der Suchstring tatsächlich zwingend bei allen Kriterien zutreffen soll, kann man die "or" auch durch "and" ersetzen. Außerdem ließen sich auch verschiedene Eingafelder für die Suchkriterien anlegen und entsprechend auswerten. Wenn man bspw. nach "frank" im Namen und "allee" in der Straße abfragen will. Das "like" sollte eigentlich auch genügen.
       

    • Leonid_Semik.2
    • vor 2 Tagen
    • Gemeldet - anzeigen

    Hallo Zusammen,
    ich würde es so machen 

    let search := SUCHFELD;
    let options := numbers(SUCHOPTIONEN);
    select TABELLENNAME
        where not search or
        (not first(options) or contains(options, 1) and Vorname like search or
                contains(options, 2) and Nachname like search or
            contains(options, 3) and Firma like search)
    

    Vorteil hier: keine if then (diese verlangsammen den script) 
    like berücksichtigt keine groß/kleinschreibung und prüft sehr perfomant.
    SUCHOPTIONEN ist ein Mehrfachauswahl Feld.

      • Ninox-Professional
      • planoxpro
      • vor 2 Tagen
      • Gemeldet - anzeigen

       Ist sicher die beste aller diskutierten Lösungen. Auch, wenn ich sie nicht komplett verstehe. 🤔

Content aside

  • vor 2 TagenZuletzt aktiv
  • 20Antworten
  • 89Ansichten
  • 5 Folge bereits