0

Filterfunktion Problem

Hey alle zusammen,

 

folgendes Problem. Ich habe ein Dashboard erstellt und dort drei Filterungen. Einmal eine “Produktkategorie”, “Suche” und “Country”.

 

Allerdings bekomme ich die Filterung des Countrys nicht hin. Kann mir hierzu jemand weiterhelfen?

 

let productCategory := text(“Product category:”);
let farmerCountry := text(“Country:”);
let mySuchtext := lower(“Suche:”);
if “Product category:” and “Country:” and “Suche:” then
select “Farmer/Producer” where “Location Country” = farmerCountry and contains(text(“Product category”), productCategory) and contains(lower(Products + “Product category”), mySuchtext)
else
if “Product category:” then
select “Farmer/Producer” where contains(text(“Product category”), productCategory)
else
if farmerCountry = null then
void
else
if “Suche:” then
let mySuchtext := lower(“Suche:”);
select “Farmer/Producer” where contains(lower(Products + “Product category”), mySuchtext)
else
select “Farmer/Producer”
end
end
end
end

9 Antworten

null
    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Kyriakos. So, wie ich das lese, benutzt Du nirgendwo die Variable farmerCountry als alleinigen Filter Du schreibst zwar, wenn farmerCountry leer, dann nichts (if farmerCountry = null then void), aber nicht if farmerCountry then... Vielleicht hilft es Dir. Kleiner Hinweis: Du deklarierst die Variable mySuchtext zweimal. Das dürfte nicht nötig sein. Mirko

    • Kyriakos_Oxyzidis
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Danke für die Hilfe Mirko.

     

    Habe es jetzt so angepasst, allerdings funktioniert jetzt der Country Filter jedoch nicht die Suchfunktion.

    let productCategory := text(“Product category:”);
    let farmerCountry := text(“Country:”);
    let mySuchtext := lower(“Search:”);
    if “Product category:” and “Country:” and “Search:” then
    select “Farmer/Producer” where “Location Country” = farmerCountry and contains(text(“Product category”), productCategory) and contains(lower(Products + “Product category”), mySuchtext)
    else
    if “Product category:” then
    select “Farmer/Producer” where contains(text(“Product category”), productCategory)
    else
    if “Country:” then
    select “Farmer/Producer” where contains(text(“Location Country”), farmerCountry)
    else
    if farmerCountry = null then
    void
    else
    if “Search:” then
    select “Farmer/Producer” where contains(lower(Products + “Product category”), mySuchtext)
    else
    select “Farmer/Producer”
    end
    end
    end
    end
    end

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Jetzt heißt Deine Variable plötzlich mySuchtext:=lower(“Search:”) und nicht wie im ersten Beitrag lower(“Suche:”). Ist es nur ein Schreibfehler? Gute Nacht. Mirko

    • Kyriakos_Oxyzidis
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Nein habe diese einfach nur verändert.

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Moin. Ich denke, dass der Ausdruck if farmerCountry = null then void die if-Abfragen beendet. Laß ihn, probehalber, einmal weg. Mirko

    • Kyriakos_Oxyzidis
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Leider erfolglos :(

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Kyriakos,

    Ich gehe mal davon aus, dass Product category: und Country: die Auswahlfelder sind und Search: ein Textfeld. Es ist mir nicht klar was für Feldtypen Location Country, Product category und Products  in der Tabelle Farmer/Producer sind.

    Wenn aber einzelne Filter an sich getestet wurden und funktionieren, würde  ich folgendes vorschlagen:

    ---

    let me:=this;
    var myFilter:=select “Farmer/Producer”;
    myFilter:=if me.“Country:” then myFilter[“Location Country”=me.text(“Country:”)] else myFilter end;
    myFilter:=if me.“Product category:” then myFilter[contains(text(“Product category”), me.text(“Product category:”))] else myFilter end;
    myFilter:=if me.“Search:” then myFilter[contains(lower(Products + “Product category”), me.lower(“Search:”))] else myFilter end;
    myFilter

    ---

     

    Leo

    • Kyriakos_Oxyzidis
    • vor 3 Jahren
    • Gemeldet - anzeigen

    ok das funktioniert tatsächlich. Könntest du mir noch eine kleine erklärung der Syntax geben? Will das nähmlich verstehen um weitere Filter einzubauen. Vielen Lieben Dank!!!

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    //deklariere Variable me als Datensatz, wo ich mich gerade befinde. Dan kann man im späteren  statt neue Variable einfach me...... schreiben//
    let me:=this;

    //deklariere die Tabelle Farmer/Producer als Variable myFilter//
    var myFilter:=select “Farmer/Producer”;

    //prüfe ob das Feld Country ausgefüllt ist und wenn Ja geben der Variable myFilter eine zusätzliche Bedingung in Eckklammern. Wenn Nein - bleibt myFilter unverändert.//
    myFilter:=if me.“Country:” then myFilter[“Location Country”=me.text(“Country:”)] else myFilter end;

    //prüfe ob das Feld Produkct category ausgefüllt ist und wenn Ja geben der Variable myFilter eine zusätzliche Bedingung in Eckklammern. Wenn Nein - bleibt myFilter unverändert.//
    myFilter:=if me.“Product category:” then myFilter[contains(text(“Product category”), me.text(“Product category:”))] else myFilter end;

    //prüfe ob das Feld Search ausgefüllt ist und wenn Ja geben der Variable myFilter eine zusätzliche Bedingung in Eckklammern. Wenn Nein - bleibt myFilter unverändert.//
    myFilter:=if me.“Search:” then myFilter[contains(lower(Products + “Product category”), me.lower(“Search:”))] else myFilter end;

    //gebe myFilter als Antwort für die Ansichtstabelle zurück//
    myFilter

     

    So prüft Ninox jede Bedingung einzeln und verändert (bzw. nicht verändert) bei jeder Prüfung die Variable myFilter. Dabei nimmt er bei jeder Weiteren Prüfung bereits geänderte Variable. So kann man unendlich viele Bedingungen abprüfen, wenn diese nicht voneinander abhängig sind.

     

    Leo

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 9Antworten
  • 657Ansichten