-
CiExtract
Bonjour
J'utilise la fonctionnalité CiExtract pour faire des recherches utilisant Index Server. Ca marche bien mais par défaut je ne peux afficher que le nombre de résultats choisis dans MaxResults. Je voudrais avoir un fonctionnement similaire à celui de xslc:ListFooter, c-à-d choisir MaxResult = 10 et naviguer ensuite de page en page.
Pour ne pas limiter le nombre de résultats retournés, il faut commenter la ligne de code suivante dans XMLGram.pas/InternalSearch(....) :
Code:
Query.MaxRecords := CiMaxRecordsPerPage * 2;
Si quelqu'un à une idée, elle sera la bienvenue.
Merci
-
En déactivant cette ligne tu vas demander a ce que Index Server te rappatrie tous les enregistrements qui peuvent correspondre à la requête. En général cela donner des milliers de documents. La question qu'il faut se poser est "est-ce que l'utilisateur est interessé d'avoir dfes milliers comme résultats ? Sera-t-il capable de naviguer dans ces résultats pour trouver celui qui l'interesse ?"
La réponse est généralement néagative. Par exemple lorsque tu effectues une recherche sur Google, est-ce que tu vas plus loin que la 2 eme page de recherche ? La plupart du temps non. On réeffectue la recherche pour trouver des critères plus pertinents permettant de faire remonter ce que l'on désire dans les premiers résultats.
D'autre part, si l'on donne plus de 10 résultats à une recherche, l'utilisateurs sera lui-meme obligé de faire une recherche "manuelle" dans la liste des résultats pour trouver ce qu'il désire. Alors qu'avec une dizaine d'enregs il va voir immédiatement si ce qu'il cherche se trouve la ou pas. Dans le cas contraire, le critère de recherche n'est pas pertinent, je dois donc l'affiner.
Enfin, rappatrier tous les résultats d'Index Server peut demander un certain, voire un temps certain qui peut etre pénalisant pour la réactivité de l'application.
Donc, si après toutes ces considérations tu estimes toujours que de rappatrier tous les documents est la meilleure chose, tu peux désactiver cette ligne, tout en sachant que pour chaque mise à jour il te faudra réeffectuer la modification...
-
Merci pour la réponse.
Je suis parfaitement conscient de ce qu'implique la mise en commentaire de cette ligne et du fait que je devrais refaire cela pour tous les nouveaux builds.... à moins que ceci ne soit passé en paramètre (ou comme une option) si cela intéresse d'autres utilisateurs.
Cela dit, si je pars sur cette voie, comment puis-je filtrer les résultats de manière à avoir un fonctionnement similaire à xslc:ListFooter. J'ai vu que les évènements
DoBeforeInternalInstruction(Input, RecordElement, Skip);
DoAfterInternalInstruction(Input, RecordElement); et
inherited DoProcess(Context, Input, RecordElement);
étaient tirés mais je ne sais pas comment les exploiter en l'état. Peut-être peux-tu me mettre sur la voie...
Merci par avance
-
CiExtract (Résolu)
J'ai résolu mon problème sans toucher au code de xmlgram.pas donc pas de remise à niveau lors des nouveaux builds