Version
5.3.39
Description
Il serait très utile d’avoir une méthode du type SetFieldFilter permettant de faire des “OR” (pour l’instant j’utilise le SQL pour ce type de requête)
5.3.39
Il serait très utile d’avoir une méthode du type SetFieldFilter permettant de faire des “OR” (pour l’instant j’utilise le SQL pour ce type de requête)
Bonjour,
Peux tu mieux exprimer le besoin car ça semble déjà possible depuis des lustres ?
setFilter("='value1' or ='value2'")
setFilter("in ('value1', 'value2')")
setFilter("='value1' or like 'value2%' or is null or in ('a','b','c')")
Il manque en effet une partie de la demande : sur deux champs différents
ChampA = ceci OU ChampB = cela
setFieldFilter
c’est par construction un filtre dédié au champ et accessible à l’utilisateur UI avec les syntaxe avancée sans connaitre le nom de la colonne ou l’alias de la table.
Les filtres multi-colonnes sont des search-spec SQL / non UI.
setSearchSpec
au niveau objet existe aussi au niveau champ :
getField("x").setAdditionalSearchSpec("t.col1>0 or t.col2<100");
getField("x").setAdditionalSearchSpec(null); // null to remove
Ca permet en général d’ajouter des filtres complexes en syntaxe SQL sans toucher à la search-spec de l’objet (limiter une foreign key avec un in (select...)
par exemple).
Le besoin est-il de donner la main à l’utilisateur sur des recherches de ce genre ?
C’est un besoin développeur, j’essaie d’utiliser au minimum le SQL pour faciliter les évolutions de code.
Je pensais à un setFieldsFiltersOR dans lequel on pourrait passer une liste de Champ/Filtre par exemple.
Ca m’avait manqué dans du code front à un moment et je rencontre de nouveau ce cas en back cette fois.
Mais ce n’est peut-être pas une bonne idée, d’autant que c’est limité si on veut utiliser des conditions plus complexes mêlant des AND et des OR.
Bonjour Emmanuelle,
Nous envisageons plus de faire évoluer l’API et le front pour que l’utilisateur puisse saisir des recherches plus complexes / sous forme d’un éditeur d’expression permettant d’utiliser tous les opérateurs et le parenthésage qui serait compilé en request au niveau de l’objet, puis traduit en SQL avec les noms de colonne.
Du style
setObjectFilter("(fieldName1>=123 or fieldName2='value') and fieldName3 is null");
Pour le very-low-code-end-user, une façon simples de coder ces expressions serait d’intégrer Blockly Blockly | Google for Developers.