0

Auswahlfeld für Suchfunktion abfragen

Hallo ich bräuchte einmal wieder Hilfe. Ich habe in einem Dashboard ein Auswahlfeld mit Ansicht dargestellt.Nun sollen in der Ansicht nur die Werte angezeigt werden, die der Auswahl entsprechen. 

Dieser Code funktioniert leider nicht, obwohl ich gelesen habe, das Auswahlfelder im Gegensatz zu MFA-Felder mit number und nicht mit numbers abgefragt werden.
*****

let myFilter := number(RezeptSuchKategorie);
(select REZEPTE)[let myFlag := false;
for i in myFilter do
for j in number(RezeptKategorie) do
if j = i then myFlag := true end
end
end;
myFlag = true]
**********

Wenn ich das ganze mit einem MFA-Feld realisiere funktioniert der Code. Wo liegt der Fehler. wenn ich numbers weglasse geht es auch nicht.

*****

let myFilter := numbers(Mehrfachauswahl);
(select REZEPTE)[let myFlag := false;
for i in myFilter do
for j in numbers(Category) do
if j = i then myFlag := true end
end
end;
myFlag = true]
****

Vielen Dank

Wolfgang 

9 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Wolfgang, ich verstehe nicht, was dein Skript genau macht, aber ein entscheidender Unterschied zwischen einfachen und Mehrfach-Auswahlfeldern ist der, dass erstere eine Zahl zurückgeben (number), letztere ein Array mit Zahlen (numbers). Die for-Schleife erwartet ein solches Array, deren Werte dann in jedem Durchlauf verarbeitet werden. Wobei auch ein Array durchaus mal aus nur einem einzigen Wert bestehen kann, dann wird die Schleife eben nur ein mal durchlaufen, aber es ist vom Aufbau her eben trotzdem ein Array.

     

    Theoretisch könnte es also vielleicht funktionieren, wenn man den Rückgabewert des Auswahlfeldes in ein Array schreiben würde:

     

    let myFilter := [number(RezeptSuchKategorie)];

     

    Aber es ist im Grunde natürlich unsinnig, mit "for i in" eine Schleife aufzubauen, von der man weiß, dass sie definitiv nur einmal durchlaufen wird.

    • Wolfgang
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter, danke für die Erläuterung, dann verstehe ich zumindest schon einmal den Unterschied und warum es nicht funktioniert.

    Gibt es denn eine andere Möglichkeit, also ohne  for i in Schleife, wie ich mein Problem lösen kann.

    ich möchte ja nur in der Ansicht, dass die Datensätze angezeigt werden, die der Auswahl entsprechen.

    Wolfgang

    • Wolfgang
    • vor 3 Jahren
    • Gemeldet - anzeigen

    o.K. Deine Inspiration hat den Durchbruch gebracht. So funktioniert es jetzt einwandfrei. Nochmals besten Dank

    ---

    let myFilter := [number(RezeptSuchKategorie)];
    select REZEPTE where myFilter = number(RezeptKategorie)

    ---

     

    Wolfgang

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

    Mir ist wie gesagt nicht ganz klar, was dein Skript genau bewirkt, aber sollte es lediglich darum gehen, in einer Ansicht die Datensätze nach dem Auswahlfeld zu filtern, dann würde ja folgendes genügen:

     

    let myKat := RezeptSuchKategorie;
    select REZEPTE where RezeptKategorie = myKat

     

    Aber irgendwie habe ich das Gefühl, das wäre zu einfach. ;)

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

    Okay, das war's wohl doch.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Wolfgang,

    wenn RezeptSuchKategorie und RezeptKategorie einfache Auswahlfelder sind und die IDs bei beiden identisch aufgebaut sind dann:

    ---

    let me:=this;

    select REZEPTE where RezeptKategorie=me.RezeptSuchKategorie

    ---

    Leo

    • Wolfgang
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, vielen Dank, das ist wieder einmal die eleganteste Lösung.😏

    • Wolfgang
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Sorry Copytexter, es war wirklich so einfach, aber wenn man das Coding nicht ständig, sondern nur gelegentlich macht, sind selbst einfache Codings eine Herausforderung. Meistens versuche ich es so lange mit Trial and Wrror bis es passt.

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

    Nein, das "einfach" war nicht auf die Lösung bezogen, sondern auf das Ziel. Mir war nicht klar, ob ich verstanden hatte, was genau du erreichen wolltest.

     

    @Leo: Hat deine Variante mit "me" bei nur einem Suchkriterium einen praktischen Vorteil? Ich hätte gedacht, dass es sogar schneller geht (zumindest theoretisch), wenn Ninox nicht mehr via "me" auf die andere Tabelle zugeifen muss, und nutze es aus Gründen der Code-Effizienz eigentlich nur, wenn mehrere Felder des Datensatzes angesprochen werden sollen.