Ankündigung

Einklappen
Keine Ankündigung bisher.

"Reverser" Tabellenfilter "beginnt mit"

Einklappen
X

"Reverser" Tabellenfilter "beginnt mit"

Einklappen
  • Filter
  • Zeit
Alles löschen
neue Beiträge

  • "Reverser" Tabellenfilter "beginnt mit"

    Hallo und einen schönen Nachmittag an alle,

    obwohl ich - unserem UP-Consulter sei Dank - inzwischen eine alternative Lösung für mein Problem gefunden habe, würde ich mich doch interessieren, warum folgendes Szenario nicht funktioniert:

    In meiner Datengruppe befindet sich ein Feld "standort" (value z. B. "ABC", dass den Anfangsteil einer dem Benutzer zugeordneten Information "sitz" (value z. B. "ABCDEF") enthält.

    Nun bietet mir der Tabellenfilter lediglich die Option, zu prüfen, ob "standort mit sitz beginnt" - ich würde jedoch genau das Gegenteil benötigen. Also habe ich im Expertenmodus die Reihenfolge der Argumente vertauscht. Interessanterweise hat dieser Tausch jedoch keine Auswirkung auf die generierte Abfrage (getQuery) und liefert mit demzufolge auch nicht das gewünschte Ergebnis.

    Hat evtl. jemand von euch eine Idee, woran das liegen könnte und wie man "Intrexx" vielleicht austricksen könnte?

    Vielen Dank und viele Grüße vom

    Sven

  • #2
    Datenbankbedingt.

    Die Bedingungen der "beginnt mit"-Abragen werden in etwa so ausgeführt:

    Code:
    WHERE <Spalte> LIKE '<Wert>%'
    Andersherum gibt es das einfach nicht:

    Code:
    WHERE <Wert> LIKE '<Spalte>%'
    Der Workaround ist dann je nach eingesetzter Datenbank unterschiedlich.

    In MySQL würde es noch leicht abgewandelt funktionieren:

    Code:
    SELECT * FROM <Tabelle> WHERE <Wert> LIKE CONCAT(<Spalte>, '%')
    In MS-SQL allerdings nicht, da könnte man es bspw. so machen:

    Code:
    SELECT * FROM <Tabelle> WHERE CHARINDEX(<Spalte>, <Wert>) = 1
    Von daher wäre der einzige Workaround, der mir spontan einfällt, tatsächlich nur ein datenbankabhängiger View, welchen man per Fremddatengruppe einbindet.
    Was dann natürlich nur für feste Filter, nicht aber für Dynamische Filter funktioniert.

    Interessant wäre jetzt allerdings schon welcher Workaround bei Euch eingesetzt wird. Denn man lernt ja nie aus

    Kommentar


    • #3
      Hallo cdarnedde,

      sorry, dass es mit meiner Antwort "etwas" länger gedauert hat, aber kurz vor meinem Urlaub kuscheln sich die "Herausforderungen" doch arg aneinander und behindern ein bisschen die Arbeit an anderen Dingen. Die Lösung stammt leider auch nicht von mir, sondern von unserem Consultant bei UP.

      Doch zum Thema - und das Wichtigste zuerst: Ich war dem Irrtum aufgesessen, dass der Filter-Operator "ist enthalten in" einen "like"-Vergleich von zwei Argumenten durchführt - leider Fehlanzeige: Dieser Operator dient lediglich dem Vergleich, ob ein Element in einer Liste anderer Elemente enthalten ist. Passt in das Schema: "Man lern nie aus" :-)

      Die Lösung liegt in einem Rendering-Handler mit der "process-before"-Methode und folgendem groovy-Code:
      def strSitz = g_session?.user?.get('Sitz')
      def strStandort = strSitz.substring(0, strSitz.indexOf("-"))
      g_sharedState.standort = strStandort


      Der in den sharedState für den "Standort" geschriebene Wert kann dann im Tabellenfilter als Systemwert "Verarbeitungskontext" für einen "ist gleich"-Operator-Vergleich verwendet werden :-)

      Das Ganze kann auch in ähnlicher Form mittels Velocity-Script ("Velocity-Datei zur Initialisierung") gelöst werden.

      Hoffe, ich konnte Dir - und vielleicht auch noch dem einen oder anderen weiterhelfen.

      Viele Grüße vom

      Sven

      Zuletzt geändert von shzi; 14.06.18, 12:17. Grund: Falscher Fehler - vielen Dank an cdarnedde für den Hinweis, den ich eingearbeitet habe.

      Kommentar


      • #4
        Danke für die Rückmeldung und den eleganten Lösungsweg. Vorher den Vergleichswert zu manipulieren funktioniert natürlich auch.

        Die "Aufklärung des Irrtums" verstehe ich jetzt allerdings nicht ganz.

        Die Wertevergleiche "Beginnt mit" und "Enthält" werden durchaus mit Feld LIKE Wert% bzw. Feld LIKE %Wert% ausgeführt.

        Eventuell meinst Du "Ist enthalten" - kleiner, aber feiner Unterschied. Dieser wird für Listvergleichen in der Form Feld IN (Wert1, Wert2, Wert3)oder auch Feld IN (SELECT Werte FROM TabelleB) verwendet.

        Na wie auch immer. Was interessiert uns die Datenbank, wenn es auch mit Boardmitteln funktioniert

        Kommentar


        • #5
          Na gerne doch - ich bin auch immer heilfroh, dass die community für dieses Forum nicht nur in der URL zu finden ist, sondern wirklich lebt - und schnell und unkompliziert weiterhilft.

          Und danke auch für Deine Korrektur - Du hast natürlich Recht: Ich meinte "ist enthalten in"... Werde das dann oben in meinem Post noch ändern, sonst wundern sich noch mehr

          Hm - irgendwie finde ich die Operationen auf DB-Ebene immer noch charmanter - da glaube ich wenigstens zu wissen, was ich tue und warum etwas ggf. nicht funktioniert

          Kommentar

          Lädt...
          X