0

Filter

Hallo Zusammen,

komme irgendwie nicht weiter.

Bildschirmfoto 2019-11-24 um 13.44.38

Habe folgendes Problen. (siehe Bild Datenmodell)

in meinem Dashboard habe ich einen Karteireiter mit Buchungen angelegt mit einer Ansicht aller getätigten Buchungen.

Jetzt würde ich mir gerne eine Suchfunktion gem der Referenzliste im Webinar. Filtern nach Kategorie ist bei mir das Feld Verwendung (nur verknüpft mit Buchung), also kein Text oder Zahlenfeld. Die Suche ansich klappt hervorragend, nur halt nicht die Filter Kategorie.

if 'Filter Kategorie' then
let myKatFilter := text('Filter Kategorie');
if Suchfeld then
let mySuchtext := lower(Suchfeld);
select Buchungen where contains(text(Verwendung), myKatFilter) and contains(lower(Verwendungszweck), mySuchtext)
else
select Buchungen where contains(text(Verwendung), myKatFilter)
end
else
if Suchfeld then
let mySuchtext := lower(Suchfeld);
select Buchungen where contains(lower(Verwendungszweck), mySuchtext)
else
select Buchungen
end
end

kann mir jemand einen Lösungsansatz nennen? Danke

Gruß

Thomas

16 Antworten

null
    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Thomas,

    wenn die Tabelle 04 Verwendung mit Buchungen verknüpft ist, solltest du statt text(Verwendung) den Verweis aus den Textfeld in der Tabelle Verwendung nutzen. Angenommen das Feld heißt Verwendungsname. Dann wäre die Vormel von contains:

    ...

    contains(Verwendung.Verwendungsname, myKatFilter)

    ...

    hilft das weiter?

    Leo

    • Thomas_Konradt
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke Leo,

    probiere ich gleich mal aus.

    Danke

    • Thomas_Konradt
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Leo.....dein Tip war wie immer Gold wert. Nochmals tausend Dank.

    • Thomas_Konradt
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    einen kleinen Schönheitsfehler gibt es noch, sobald ich bei der Filterauswahl (Mehrfeld) mehrere Kriterien auswähle geht es nicht.

    Gruß

    Thomas

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Dann würde ich es umgekehrt machen:

    ...

    contains(myKatFilter, Verwendung.Verwendungsname)

    ...

    Leo

    • Thomas_Konradt
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    passt. Danke

    Gruß

    Thomas

    • privat
    • Olaf_Nensel
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo,

    auf den aktuellen Filter einer Tabellenansicht möchte ich auch gerne zugreifen, allerdings im on-click-event von einem Button. Den gleichen Code wie oben kann ich dafür nicht verwenden:

    Gibt es dafür auch eine Lösung?

    Viele Grüße

    Olaf

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      Also die Fehlermeldung besagt, dass der Feldname nicht stimmt.

      Das müsstest du prüfen. Bzw. ggf. mehr Informationen hier posten.

      VG Ronald

      • privat
      • Olaf_Nensel
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hallo liebe Forengemeinde,

      die erste Code-Zeile im Ausgangspost startet etwas ansatzlos und hat bei mir zu einem Missverständnis geführt:

      ---

      if 'Filter Kategorie' then

      ---

      Ich dachte, dass dieser Code direkt auf den Tabellenansichtsfilter zugreift. Inzwischen ist mir klar geworden, dass das nicht möglich ist, sondern nur über einen Zwischenschritt, das entsprechende Datenfeld eines Dashboards. So werde ich es jetzt auch machen - nicht ganz so minimalistisch wie ich dachte, aber: "Das ist der Weg!" ;)

      Viele Grüße

      Olaf

    • privat
    • Olaf_Nensel
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Ronald,

    in meinem minimalistischem English-Trainer mit einer einzigen Tabelle wird von den Einträgen zunächst nur die deutsche Fassung angezeigt. Der Benutzer soll mit der Schaltfläche "Show" die englische Übersetzung zur Anzeige bringen und anschließend mit den Schaltflächen "True" bzw. "False" den Zähler für eine richtige Lösung um 1 hoch- bzw. runtersetzen können. Bis dahin alles kein Problem.

    Um dem Benutzer einen weiteren Klick auf den (m. E. nur etwas fummelig zu erreichenden) Standardbutton für den nächsten Datensatz zu ersparen, soll nach dem Klick auf "True" bzw. "False" gleich der nächste Datensatz selektiert werden. Die Lösung für das Problem der richtigen Sortierung habe ich gefunden. Was mir noch fehlt ist, dass ich myArr für openRecord() genauso filtern muss wie in der aktuellen Tabellenansicht - ansonsten ist der erste Datensatz in myArr nicht immer der nächste in der aktuellen Tabellenansicht.

    Für jede Hilfe sehr dankbar,

    Olaf

    "Ansichtsfeld nur mit Inhalt 'Deutsch' zurücksetzen";MergeTxt := German;"Zähler Solved hochsetzen";if Solved < 7 then Solved := Solved + 1 end;"Nächsten Datensatz selektieren";let myFlag := false;let myN := Id;let myArr := for i in (select Sentences) order by Solved do        if not myFlag and i.Id != myN then            void        else            if i.Id = myN then myFlag := true else i end        end    end;openRecord(first(myArr))

    Link zur Ninox-Datei in Dropbox: https://www.dropbox.com/s/yzspgsqvusf0per/EnglishTrainer.ninox?dl=0

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      auf die Schnelle, versuche mal dieses für myArr:

      let myArr :=  (select Sentences)  where not myFlag and i.Id != myN  order by Solved
      

      Ggf. weitere Bedingungen die in deiner Schleife drin sind, noch ergänzen.

      VG Ronald

    • privat
    • Olaf_Nensel
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Ronald,

    ich suche einen Weg, wie ich die Datensätze in myArr genauso filtern kann wie in der aktuellen Formulartabellenansicht, die ich meistens nach einer einzelnen Lektion (1, 2, oder ..) oder / und auch nach einem bestimmten Lösungsfotschritt (z. B. Solved = 2).

    Die Frage ist also:

    Wie kann ich in dem Code zu einem Button den Filter der aktuellen Formulartabellenansicht zur Laufzeit auslesen?

    Viele Grüße 

    Olaf

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

       schau mal, ob das dem nahe kommt, was Du wolltest. Mirko

      • privat
      • Olaf_Nensel
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Leider nicht. Auch diese Lösung liefert unter Umständen als nächstes einen Datensatz, der in der sichtbaren, gefilterten Tabellenansicht nicht enthalten ist - weil die gleichen Filterbedingungen der aktuellen Tabellenansicht nicht auch myArr filtern:

      ---

      let myArr := ((select Sentences) order by Solved + " " + no)[Solved < 6 and number(Id) != 11];

      ---

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Da der Tabellenfilter Solved<6 ist, gibt mein Script nur Datensätze mit dieser Bedingung aus. Ich weiß nicht, welche Umstände Du meinst, bei denen ein anderer DS aufgerufen wird, außer, wenn der letzte DS erreicht wurde. Wenn aber der letzte DS erreicht ist (das Aaray = 0), würde das Formular geschlossen werden, deshalb habe ich für diesen Fall Datensatz 11 eingefügt, bei dem man dann schlussendlich landet. Ist natürlich immer noch möglich, daß ich es falsch verstanden habe.

      • privat
      • Olaf_Nensel
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Nur für das Forum hier habe ich einen Demo-Version mit nur einer Handvoll Datensätzen erstellt. In der realen Nutzung hat die Tabelle mehrere tausend Datensätze, von den ich aktuelle immer nur eine Auswahl einer oder mehrerer Lesson (=Nr), ggf. mit einem ausgewählten Lernstand abarbeiten möchte.

      Tabellenfilter ist daher nicht nur Solved<6, sondern auch immer eine oder mehrere Lesson (=Nr); siehe Tabellenansicht "Practice". Natürlich möchte ich nach Änderung des Tabellenfilters nicht immer den Code zu den Button umschreiben. Ich suche nach einer Möglichkeit, zur Laufzeit auch den Filter zur Spalte Lesson (=Nr) dynamisch auszulesen und auf myArr anzuwenden.