Portlet Iteration et Filtre Date Evénement de Calendrier

Julien Valéry · le 13/09/13 à 12:56

Bonjour,

Nous aurions besoin au moyen des PortletIteration de pouvoir filtrer les évènements (CalendarEvent) passés (date de fin).

J’ai rajouté l’option sur la portlet iteration (filtrer ou pas), parcouru toute les javadoc ou presque ;)….mais je ne vois pas comment passer ce filtrage.

La classe QueryHandler n’a pas l’air de permettre au travers du QueryString ou des get/set existant de proposer ce filtrage sur un champ spécifique pr un contenu spécifique (CalendarEvent) de type date.

Est-ce possible ? Avez-vous une solution à proposer.

Merci,

Julien

13 pts
Yvan Janet · le 17/09/13 à 09:12

Bonjour.

Je pense qu'il va falloir passer par l'intermédiaire

  • d'un gabarit custom 
  • d'un queryfilter appelé dans le gabarit custom et qui prenne en charge la vérification du champ date en surchargeant la méthode filterResultSet(QueryHandler qh, QueryResultSet set, Map context) pour re-définir le set de publications à afficher.
#1

Bonjour Yvan,

C'est bien ce que j'essaye de faire en surchargeant filterResultSet mais je ne vois pas comment.

Nous étendons le type AbstractCalendarEvent qui propose les champs "startDate" et "endDate" qui nous intéressent.

Par contre je ne trouve le moyen pour les exploiter dans le QueryHandler.

Julien Valéry · le 18/09/13 à 17:53
0 pt
Thomas LEGAT · le 18/09/13 à 17:44

Bonjour,

Il y a depuis JCMS 7.1, la possibilité de déclarer des Comparator custom à JCMS afin qu'ils soient proposés dans la liste des Pqf et Pqfd. Voilà la documentation explicative: JCMS 7.1 : Tri de données via le ComparatorManager (http://community.jalios.com/jcms/jx_70750/fr/jcms-71-tri-de-donnees-via-le-comparatormanager)

Cette solution sera la plus propre à partir de JCMS 7.1

 

PS: Au support, j'ai l'impression que la création de lien vers un contenu n'est pas prise en compte lors de la soumission...

#1

Bonjour Thomas,

Solution intéressante aussi, mais nous sommes sur une v6 pr l'instant..

Julien Valéry · le 18/09/13 à 17:53
0 pt
Yvan Janet · le 19/09/13 à 09:32

Sur le concept, on peut réaliser le filtrage comme ceci : 

public QueryResultSet filterResultSet(QueryHandler qh, QueryResultSet set, Map context) {
  HttpServletRequest csrq = Channel.getChannel().getCurrentServletRequest();
  // Utiliser les fonctions OWASP à la place du getAttribute sans contrôle
  if (csrq != null && Util.notEmpty(csrq.getAttribute(FILTER_ATTRIBUTE))) {
    String value = (String) csrq.getAttribute(FILTER_DATE_VALUE);
    Iterator<Publication> iter = set.iterator();
    while (iter.hasNext()) {
      Publication pub = iter.next();
// La méthode matchRequestedValue( ... ) est le coeur métier à implémenter
        if (!matchRequestedValue(pub, value)) {
          iter.remove();
        }
      }
    }
  }
  return set;
}
#1

Je teste ça ASAP et reviens vers vous, merci

Julien Valéry · le 19/09/13 à 18:40
0 pt