1

Ansicht filtern mit mehreren Optionen

Habe ein Formular mit 3 Abfrage Kriterien myj= Vertrag und myDatum=Datum und dann mySuchwort=Such Wort. Es funktioniert schon gut. Ich kann kombiniert nach Vertrag(myJ) und Datum(myDatum) filtern. Nur schaffe ich es nicht mySuchwort mit den anderen zu verbinden. Wie sollte ich zb mySuchwort und myDatum schreiben das es mir beide herausfiltert? Hänge da fest, vielleicht kann mir ja bitte jemand sagen wie die If Suche zu schrieben ist. Vielen Dank schönen Sommer. lg Claus

 

let my := this;
let myJ := text(Vertrag);
let mySuchwort := text('Such Wort');
let myDatum := text(Jahr);
if mySuchwort then
    (select 'Infos Verträge')[(not my.mySuchwort or contains(lower(Betreff), lower(my.mySuchwort))) and
        (not my.mySuchwort or contains(lower(Betreff), lower(my.mySuchwort)))]
else
    if myDatum and myJ then
        select 'Infos Verträge' where year(Datum) = myDatum and text(Vertrag) = myJ
    else
        if myJ then
            select 'Infos Verträge' where text(Vertrag) = myJ
        else
            if myDatum then
                select 'Infos Verträge' where year(Datum) = myDatum
            else
                select 'Infos Verträge'
            end
        end
    end
end

19 Antworten

null
    • Claus.1
    • vor 1 Monat
    • Gemeldet - anzeigen

    vielleicht habe ich es zu kompliziert geschrieben würde gerne die 2 Suchen zusammenführen das ich alles zusammen suchen kann. Verstehe nur nicht wie ich die 2. Suchabfrage mit der ersten kombiniere. Vielleicht kann mir da jemand einen Tipp bitte geben. Ich bin nur Hobby Bastler :) und komm da nicht drauf. Vielen Dank

      if mySuchwort then
        (select 'Infos Verträge')[(not my.mySuchwort or contains(lower(Betreff), lower(my.mySuchwort))) and
            (not my.mySuchwort or contains(lower(Betreff), lower(my.mySuchwort)))]
    else

     

    den 2. Suchkriterien hinzufügen.

        if myDatum and myJ then
            select 'Infos Verträge' where year(Datum) = myDatum and text(Vertrag) = myJ
        else

    • Ninox-Professional
    • planoxpro
    • vor 1 Monat
    • Gemeldet - anzeigen

    Hallo Claus, wenn ich für eine Ansicht mehrere Filter habe, die beliebig miteinander kombinierbar sein sollen, arbeite ich i. d. R. mit einer Variablen für die Kombination (im Beispiel unten 'myKombi' genannt). Damit bleibt das Script übersichtlich und lässt sich auch relativ schnell erstellen, weil man die Variante mit allen Filtern ("XXX") per Copy & Paste in die anderen Kombis übernehmen kann und dort jeweils nur die nicht zutreffenden Filter entfernen muss.

    Beispiel-Schema für eine Ansicht mit drei Filtern:

    let me := this;
    let myKombi := "";
    myKombi := myKombi + if FilterA then "X" else "_" end;
    myKombi := myKombi + if FilterB then "X" else "_" end;
    myKombi := myKombi + if FilterC then "X" else "_" end;
    switch myKombi do
       case "X__": select Tabelle[FeldA = me.FilterA]
       case "_X_": select Tabelle[FeldB = me.FilterB]
       case "__X": select Tabelle[FeldC = me.FilterC]
       case "XX_": select Tabelle[FeldA = me.FilterA and FeldB = me.FilterB]
       case "X_X": select Tabelle[FeldA = me.FilterA and FeldC = me.FilterC]
       case "_XX": select Tabelle[FeldB = me.FilterB and FeldC = me.FilterC]
       case "XXX": select Tabelle[FeldA = me.FilterA and FeldB = FilterB and FeldC = me.FilterC]
       default: select Tabelle
    end

    Bei umfangreicheren Tabellen kann man die Datensätze auch in ein Array übernehmen und dann dieses filtern.
     

      • Claus.1
      • vor 1 Monat
      • Gemeldet - anzeigen

       könnte man eine Bespiel Datenbank bekommen mit 3 simplen Filter wie sie das aufbauen würden. Oder gibts diese schon im Webinar De und ich finde sie nur nicht. (Verstehe nicht wo FilterA konfiguriert ist) Vielen Dank für ihre Bemühungen. Grüsse Claus

      • Rafael_Sanchis
      • vor 1 Monat
      • Gemeldet - anzeigen

       

      hi Noel, I don't know is the best example but work.

      Go to Invoices the Tab Filter 3

      • Rafael_Sanchis
      • vor 1 Monat
      • Gemeldet - anzeigen

       

      This example is with the Planox.pro script.

      • Claus.1
      • vor 1 Monat
      • Gemeldet - anzeigen

       Thank you for our exampel. 

    • Ninox-Professional
    • planoxpro
    • vor 1 Monat
    • Gemeldet - anzeigen

    Ach so, entgegen der sonstigen Ninox-Empfehlung würde ich bei dynamischen Ansichten im "select" statt "where" immer eckige Klammern nutzen, da es sonst zu Problemen bei der Aktualisierung kommen kann. 

      • Customer Support Ninox
      • uwe_groegor
      • vor 1 Monat
      • Gemeldet - anzeigen

       
      Auszug aus der Dokumentation: https://docs.ninox.com/de/anwendungsbeispiele/tipps-und-tricks-fur-schnelle-datenbanken

      Sie sollten dabei allerdings select nie direkt mit Klammern [...] verwenden.

      Beispiel 1

      Copy

      select Kunden[Firmensitz = "Deutschland"]

      Hier werden erst alle Kunden ausgewählt, anschließend wird nach Firmensitz gefiltert.

      So geht's besser

      Ziehen Sie die Filter-Bedingung aus der Klammer [...] in die select-Anweisung.

      Copy

      select Kunden where Firmensitz = "Deutschland"

      Durch where werden von Anfang an nur passende Datensätze ausgewählt.

      • Ninox-Professional
      • planoxpro
      • vor 1 Monat
      • Gemeldet - anzeigen

       Hallo Uwe, deshalb schrieb ich ja "entgegen der sonstigen Ninox-Empfehlung". 😉

      Es geht nicht um Performance-Probleme. Ich nutze normalerweise immer brav "where". Tatsache ist aber, dass bei einem Kunden die Ergebnisse der dynamischen Filterung in der Ansicht immer wieder mal unvollständig waren. So wurden bspw. nur zwei von drei Treffern angezeigt. Ich war zuerst ratlos, habe mich dann aber daran erinnert, dass das auch schon mal Thema in der Partner-Community war, und versuchsweise auf eckige Klammern umgestellt . Seit dem läuft es reibungslos.

      Oder soll ich euch das noch mal offiziell als Bug melden?

      • Rafael_Sanchis
      • vor 1 Monat
      • Gemeldet - anzeigen

       

      Two out of three results were always shown, in both options

      • Ninox-Professional
      • planoxpro
      • vor 1 Monat
      • Gemeldet - anzeigen

       What I meant was that when I entered the name "Mustermann" in a text search field, the view with "where" only showed two records, even though the string appeared in three records. With square brackets, all three were shown.

      • Rafael_Sanchis
      • vor 1 Monat
      • Gemeldet - anzeigen

       

      that is correct 

      • UweG
      • vor 1 Monat
      • Gemeldet - anzeigen


      Hallo Axel, ja gerne ein Ticket an Support mit Hinweis auf mich.
      Ich werde dann um einen Zugang zu einer DB anfragen, wo dieses Problem auftritt um es mir anzusehen und zu testen.
      Gruss
      Uwe

    • UweG
    • vor 1 Monat
    • Gemeldet - anzeigen
    • UweG
    • vor 1 Monat
    • Gemeldet - anzeigen

    let myJ := text(Vertrag);
    let mySuchwort := lower(text('Such Wort'));
    let myDatum := text(Jahr);
    (select 'Infos Verträge') where (not mySuchwort or contains(lower(Betreff), mySuchwort)) and (not myDatum or year(Datum) = myDatum) and (not myJ or text(Vertrag) = myJ)
       

      • Claus.1
      • vor 1 Monat
      • Gemeldet - anzeigen

       hier kommt mir die Fehlermeldung "Ende erwartet in Zeile 4" in der letzten Zeile scheint ein Fehler zu sein. 

      • UweG
      • vor 1 Monat
      • Gemeldet - anzeigen

      Bau  einfach mal die select Bedingung Stück für Stück nach und schaue ab wann die Fehlermeldung auftritt.
      Kann sein, dass ich eine Klammer zuviel/zuwenig gesetzt habe oder ein Semikolon an einer Stelle fehlt.
      Das passsiert manchmal und da muss man bei einer solchen Meldung selbst auf Schreibfehler prüfen.
      Ich habe das Script nach besten Wissen erstellt.
       

      Das ist die schnellste Methode, wenn man mit MultiFilter arbeiten muss.
      Dass macht sich vielleicht noch nicht bei 1-3 gleichzeitigen Filtern bemerkbar aber je mehr Filter man nutzt und je grösser die Datenbasis wird, desto performanter ist dieses Scripting.

      • Claus.1
      • vor 1 Monat
      • Gemeldet - anzeigen

       Danke Fehler schnell gefunden bei select 'Infos Verträge' dürfen keine Klammern stehen dann funktioniert es bestens. Unten aktuelles Script welches funktioniert!! Wenn jemand es brauchen sollte. Vielen dank

      let myJ := text(Vertrag);
      let mySuchwort := lower(text('Such Wort'));
      let myDatum := text(Jahr);
      select 'Infos Verträge' where (not mySuchwort or contains(lower(Betreff), mySuchwort)) and (not myDatum or year(Datum) = myDatum) and (not myJ or text(Vertrag) = myJ)

    • Claus.1
    • vor 1 Monat
    • Gemeldet - anzeigen

    Erstmals Dank für Eure Hilfe. Habe mir von die Datenbank angesehen und konnte einige Sachen zu nutze machen. Hatte mehrer Probleme nun ein paar weniger ;) danke

    Planox.pro dein Ansatz finde ich auch sehr Interessant komm nur nicht ganz drauf wie das funktoniert. Könnte man vielleicht eine Beispieldatenbank dazu bekommen, dass ich das besser Verstehe oder gibt es in "Webinar de" ein Beispiel welches ich mir anschauen könnte.  Vielen Dank für die tollen Tipps. Top Forum und super nette Leute

Content aside

  • 1 „Gefällt mir“ Klicks
  • vor 1 MonatZuletzt aktiv
  • 19Antworten
  • 110Ansichten
  • 7 Folge bereits