fix(qlik-search): la sélection ne s'appliquait pas, les résultats ne correspondaient pas au terme

Symptôme : « tapis anti » renvoyait 40 articles sans rapport (mugs, miroirs,
couvertures) avec des codes centraux contigus — c'est-à-dire le début du
catalogue Qlik, pas un résultat de recherche.

Cause : SearchResults + SelectValues. On ré-injectait les qText renvoyés par la
recherche globale dans un SelectValues sur le champ, sans vérifier le retour et
sans laisser à l'Engine le temps d'évaluer la sélection. Quand la sélection
n'est pas appliquée, le cube renvoie simplement les premières lignes de la
dimension « Article Code » — soit exactement les 40 lignes demandées.

Correctifs :
- Sélection via list object : SearchListObjectFor + AcceptListObjectSearch,
  c'est-à-dire le mécanisme d'un volet de filtre Qlik. Qlik applique sa propre
  sémantique de recherche et sélectionne lui-même les valeurs, sans réinjection
  de valeurs texte. Libellé d'abord, code centrale en repli.
- Délai d'évaluation (QLIK_SETTLE_MS, défaut 250 ms) après ClearAll, après la
  recherche et après l'acceptation, comme le fait déjà l'extraction.
- Garde-fou côté client : chaque ligne du cube est revérifiée contre le terme
  (tous les mots présents dans le libellé, insensible casse/accents, ou code
  correspondant). Une liste sans rapport avec la recherche est pire que zéro
  résultat.
- Dédoublonnage par code centrale : un article référencé chez plusieurs
  fournisseurs produisait autant de lignes (vu sur « Couverture de Pique-nique »,
  code 10636135, listé deux fois).
- Diagnostic : inventaire des champs, nombre de valeurs trouvées, sélections
  actives et compteur de lignes écartées sont tracés dans les logs ; si tout est
  écarté, l'UI dit que le filtre n'a pas été appliqué au lieu d'afficher un
  « aucun résultat » trompeur.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfqUihgixw4K1AmJhizWiu
This commit is contained in:
Claude committed 2026-07-29 09:14:56 +00:00
1 parent 62375d3310
commit a1a95fa290
3 files changed
+177 -64

No files matched your search

+4 -1
View File
@@ -116,7 +116,10 @@ async function executerRecherche(term: string): Promise<ProduitRechercheResultat
return {
rows: [],
source: "qlik",
qlikError: null,
// `avertissement` n'est renseigné que si Qlik a répondu sans appliquer
// le filtre : l'utilisateur doit savoir que ce n'est pas « pas de
// produit » mais « recherche non appliquée ».
qlikError: qlik.avertissement,
tronque: false,
champUtilise: qlik.champUtilise,
locauxHorsReseau: locaux,