We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Requête Avancée Portlet Itération

Clément Tessier · on 1/12/16 at 5:10 PM

Bonjour,

Je cherche à effectuer d'une requête avancée pour une portlet itération. J'ai un tableau de date, et j'ai besoin de ne récupérer seulement les contenus ayant une des dates dans le future.

Voyez-vous une solution pour aboutir à cela ? J'ai pensé à un filtre au niveau du template mais cela ne s'accorde pas bien avec la pagination...vous comprendrez pourquoi.

 

Merci pour votre aide.

Cordialement,

#1

Pourquoi ne pas filtrer au niveau de la query en utilisant la méthode filterQueryHandler plutôt que filterResultSet ? Comme cette méthode s'applique avant de renvoyer les résultats, il n'y a pas de soucis avec la pagination. Personnellement, je l'avais utilisé pour ajouter les publications non publiées dans certaines portlets en utilisant les habilités de portlet et je n'ai pas eu de soucis :)

Ubald de Bellabre · on 1/13/16 at 9:47 AM
#2

Merci pour votre retour. Cela me paraît intéressant dans mon cas en effet. Par contre, je n'ai jamais fait ce genre de développement, comment est-ce que cela fonctionne ? Comment préciser à la portlet qu'il faut utiliser le filterQueryHandler ?

Merci pour votre aide. Cordialement,

Clément Tessier · on 1/13/16 at 9:55 AM
#3

Vous pouvez parfaitement appliquer un selector dans votre gabarit tout en ayant la pagination native JCMS de correct. Il vous suffit après avoir appliquer votre selector de rebasculer votre collection filtrée dans l'objet collection et de réaffecter la bonne valeur à la variable resultSize. Vous pouvez aussi utiliser la méthode filterQueryHandler

Thomas LEGAT · on 1/13/16 at 9:56 AM
12 pts
Ubald de Bellabre - on 1/13/16 at 10:20 AM
Best answer

"Comment préciser à la portlet qu'il faut utiliser le filterQueryHandler ?"

J'ai créé un QueryFilter qui s'applique par défaut à toutes les portlets. Dans la méthode filterQueryHandlerdu QueryFilter que j'ai créé, je lui précise qu'il peut s'appliquer que si la portlet a une habilité précise : qh.getPortlet().hasAbility("portlet.ability.jcmsplugin.pluginName.abilityName")

Par contre je n'ai pas trouvé de doc précise sur comment utiliser les habilités de portlets, si quelqu'un de Jalios passe par là, il devrait y avoir une page dédiée.
Pour déclarer une habilité, dans le plugin.prop (penser à ajouter dans le fr.prop le libellé traduit) :
portlet.ability.jcmsplugin.pluginName.abilityName: Portlet
Et après dans la configuration de la portlet dans l'onglet "avancé", il y a des cases à cocher qui correspondent à l'habilité. Voici un exemple sur mon projet :

aptitudePortlet

Vous pouvez trouver un exemple dans les plugins "espaces collaboratif" ou "bureau virtuel" si vous les avez.

L'avantage de cette méthode c'est qu'on enrichi le filtre en java avant de récupérer les résultats de la query, plutôt que de récupérer plein de résultats et d'en afficher que certains dans la liste. Quand on est dans le store ça change que sur des très gros volumes je pense mais quand on est en base de données, c'est interressant d'avoir cette approche...

#2

Vous pouvez consulter https://community.jalios.com/jcms/jx_64101/fr/catalogue-des-points-de-debranchement-hooks-disponibles-dans-l-api-jcms#toclink_52 et https://community.jalios.com/jcms/jx_32985/fr/developpement-de-recherches-etendues-avec-l-api-des-queryfilter Mais il manque un peu de documentation sur le sujet, j'ai du faire quelques tests avant d'arriver au résultat que j'attendais.

Tant que vous n'avez pas défini de portlet.ability dans un des plugins de votre application, la section n'apparait pas effectivement.

Ubald de Bellabre · on 1/13/16 at 11:25 AM
#3

Parfait, merci beaucoup pour votre aide.

Cordialement,

Clément Tessier · on 1/13/16 at 11:26 AM
#4

D'après ce que je souhaite faire, il semblerait que surcharger filterResultSet correspondrait le mieux. Je ne vois vraiment pas comment utiliser le QueryHandler de filterQueryHandler pour ajouter un filtre supplémentaire d'après la documentation https://community.jalios.com/docs/javadoc/com/jalios/jcms/handler/QueryHandler.html.

Pour chaque résultat potentiel, j'ai besoin d'effectuer un traitement sur une de ses valeurs afin de savoir si il peut apparaître dans les résultats ou non. En faisant cela dans le filterResultSet je n'aurais plus mes soucis de pagination.

Avez-vous des éléments pour me guider dans ce travail dans filterQueryHandler ou pensez-vous qu'en effet, utiliser filterResultSet serait plus simple ?

Merci pour votre aide.

Clément Tessier · on 1/13/16 at 2:39 PM
10 pts