Valeurs Filtrer Matrix en tant que paramètres

Habituellement, la matrice de filtres et divers widgets fonctionnent ensemble de manière assez transparente. Si nous activons la case à cocher "Appliquer la requête de matrice de filtres", les filtres de la matrice de filtres sont automatiquement appliqués à la requête de recherche et, par conséquent, les données de la requête de données sont filtrées en conséquence.

Mais il est parfois avantageux (par exemple, pour des raisons de performances ou pour le transmettre à une procédure stockée) d'utiliser directement les valeurs de matrice de filtre sélectionnées dans une requête de données.

Voyons d'abord comment fonctionne le filtre automatique sous le capot.

Nous obtenons des données sur les employés à partir d'une requête de données appelée employees . De plus, nous avons une matrice de filtres pour filtrer le tableau par department . Nous utilisons la fonctionnalité de recherche automatique de matrice de filtre à l'aide de la case à cocher "Appliquer la requête de matrice de filtre".

La requête de données elle-même est une sélection très simple sur la table mitarbeiter .

SELECT * from mitarbeiter

Dès que nous commençons à sélectionner des valeurs dans la table de filtrage, le tableau de bord demande les données au service Web à l'aide d'une requête select . Il transforme les valeurs sélectionnées de la matrice de filtre en paramètre d'URL de department department=IN(Development,Management) . Ainsi, le service Web ne renvoie que les lignes avec le département "Développement" ou "Gestion".

Le service Web applique automatiquement tous les paramètres pour lesquels il a une colonne en tant que filtre. Ceci s'applique également aux paramètres directement ajoutés au champ "Requête de recherche".

Puisque nous savons maintenant comment fonctionne le mécanisme de filtrage automatique, nous pouvons commencer à utiliser les valeurs de la matrice de filtrage comme paramètre de requête de données. Pour ce faire, nous devons étendre un tout petit peu la requête de données.

SELECT 
  * 
 FROM 
   mitarbeiter
 WHERE
   ${departmentFilter} = '' OR
   ${departmentFilter}::text IS NULL OR
   department = ANY (string_to_array(${departmentFilter}, ','))

Nous définissons un paramètre de requête de données appelé departmentFilter . Plus tard, nous allons passer la sélection de la matrice de filtre qui est ensuite transformée en tableau. En utilisant l' operateur ANY , nous filtrons les valeurs contenues dans le tableau. Dans le cas où aucune valeur n'est sélectionnée, nous obtenons une chaîne vide ou NULL et n'appliquons pas du tout departmentFilter (en utilisant la comparaison avec une chaîne vide / NULL et OR ).

Nous devons également ajouter le paramètre departmentFilter=${filterMatrix.department} à la requête de recherche de la table. Et nous pouvons également supprimer la case à cocher "Appliquer la requête de matrice de filtre" si nous ne voulons pas appliquer d'autres filtres.

Veuillez noter que nous utilisons departmentFilter comme nom de paramètre au lieu de simplement department . L'utilisation de ce dernier entraînerait un conflit de nom avec la colonne du department . Comme nous l'avons appris précédemment, le service Web applique automatiquement des filtres pour les paramètres pour lesquels il trouve une colonne. Par conséquent, il filtrerait par exemple les données pour department = 'Development,Management' qui n'est jamais vrai et ne renvoie jamais de lignes.