Filterregel als Ausschluß

Möchte man einen Filter erstellen welcher das Attribut nicht „eingrenzt“ sondern „ausgrenzt“, kann man dies mit einer speziellen Anordnung der Filterregeln erreichen.

Als Beispiel kann die Mitarbeiterliste herangezogen werden. Wenn ein Filter auf die Abteilung erstellt wird, werden die Ergebnisse auf genau die im Filter ausgewählte Abteilung eingegrenzt, d.h. es werden nur die Items ausgegeben, bei denen „Abteilung gleich Filterwert“ ist - z.B. „Filtere alle Mitarbeiter aus Abteilung ‚Marketing‘“.

Möchte man aber alle Abteilungen außer der im Filter ausgewählten Abteilung (diese also ausschließen, z.B. „Filtere alle Mitarbeiter die nicht in Abteilung ‚Marketing‘ sind“), kann man wie folgt vorgehen:

  • man fügt eine Filterregel „ODER-Bedingung (OR)“ ein mit gesetzter Checkbox „Nach erstem Treffer beenden“

  • in die Filterregel kommt eine Filterregel „Eigenes SQL“ sowie eine Filterregel wie z.B. „Einzelauswahl“

Anschließend sollten die Filterregeln etwa wie im Screenshot zu sehen angeordnet sein.

img_exclusion

In der Filterregel „Eigenes SQL“ wird folgende Query eingetragen:

1SELECT id
2FROM {{table}}
3WHERE abteilung IN (
4  SELECT id
5  FROM mm_abteilung
6  WHERE alias != {{param::get?name=abteilung}}
7  OR ({{param::get?name=abteilung}} IS NULL)
8)

Hintergrund: Die Filterregel „Einzelauswahl“ dient lediglich für die Erstellung bzw. Anzeige des Formularwidgets im Frontend. Die eigentliche Filterung erfolgt in der Filterregel „Eigenes SQL“. Die Abarbeitung der weiteren Filterregel im „ODER-Zweig“ wird aber unterbrochen, so dass die eigentliche Filterregel „Einzelauswahl“ nicht mehr zum Zuge kommt.