Souhaitez une bonne année à vos utilisateurs Alfresco (2/2)

Il est assez désagréable de surfer sur des sites web qui, au joli mois de mai, nous souhaitent encore une bonne année.
Nous voulons donc éviter cela sur l’Alfresco que nous offrons à nos utilisateurs.
Dans le billet précédent, nous avons mis en place notre message; il est temps maintenant de déterminer différentes stratégies pour ne pas oublier de le supprimer à la fin du mois, par exemple en désactivant le module.

Parmi les possibilités qui me viennent en tête, on peut noter :

  • La note dans l’agenda
    • Avantages : simple, un agenda et un stylo suffisent !
    • Inconvénients : il faut penser à ouvrir l’agenda, quid des éventuelles absences ?
  • La tâche de workflow
    • Avantages : intégrée à Alfresco, peut être partagée, peut émettre des rappels par e-mail. C’est une très bonne option qui fera probablement l’objet d’un billet ultérieur
    • Inconvénients : le travail de mise en oeuvre peut être important, une action manuelle est toujours nécessaire
  • Un évaluateur de module basé sur des critères temporels
    • Avantages : complétement automatique, peut servir à l’affichage et à la suppression, est l’objectif fondamental de ce billet
    • Inconvénient : le module n’est pas désactivé, il n’est juste pas exécuté

Oui, ce billet a bien pour but d’illustrer la création d’un évaluateur de module personnalisé ;-)

Principe des évaluateurs de modules

Un évaluateur de module (un « module evaluator ») est un code Java qui sera exécuté à chaque fois qu’un module pourra être exécuté. L’évaluateur calcul le droit d’exécution à partir du contexte de la demande (utilisateur, site, etc.) et de propriétés qui auront été définies au préalable et retourne un booléen (true si l’exécution peut avoir lieu).
Compte tenu de la fréquence potentielle d’appel à ces évaluateurs, il faudra rester vigilant sur leur complexité.
De tels évaluateurs existent également pour les sous-composants définis dans le module. Ceux-ci ne sont bien entendu utilisés que si le module est « évalué » à vrai.

Liste des évaluateurs disponibles en standard


En standard, on dispose des évaluateurs de modules :

  • config.approval.evaluator : une propriété permet de spécifier si le module doit être exécuté ou non. J’ai tendance à préférer la désactivation du module à l’utilisation de cet évaluateur.
  • Configuration de "config.approval.evaluator"

  • site.module.evaluator : permet d’exécuter le module si le site courant répond à des critères de nom ou de preset. A noter que les valeurs des propriétés site et sitePresets peuvent être des expressions booléennes. Pratique !
  • Configuration de "site.module.evaluator"

  • portlet.module.evaluator : permet d’exécuter le module en fonction de l’url de la portlet (si utilisation en tant que portlet). Là encore, une expression régulière peut être utilisée.
  • Configuration de "portlet.module.evaluator"

Une fois les paramètres définis, il est nécessaire de cliquer sur les boutons Update puis Apply Changes (ne pas l’oublier !) pour que le module soit convenablement configuré.

Séquence pour valider le paramétrage d'un module

Démarche générale de définition d’un composant

Bien entendu, les évaluateurs disponibles nativement ne correspondent jamais à nos besoins ;-)
Il va donc falloir apprendre à créer les nôtres.
C’est extrêmement simple :

  1. Créer une classe Java implémentant ExtensionModuleEvaluator
  2. Définir les méthodes :
    • public boolean applyModule(RequestContext context, Map params) : c’est la méthode principale, celle qui va exécuter le calcul
    • public String[] getRequiredProperties() : la liste des propriétés attendues par le module
  3. Référencer l’évaluateur comme un bean Spring
  4. <bean id="mon.module.evaluator" class="fr.amexio.alfresco.web.extensibility.MonModuleEvaluator"/>

Et voila !
Plutôt simple, non ? En plus, grâce à Spring, il va être très facile d’injecter dans notre évaluateur d’autres propriétés qui pourraient être utiles au traitement.

Mise en œuvre de notre propre évaluateur

Nous avons besoin que notre module « Happy New Year » affiche son contenu entre le 1er Janvier 2012 et le 31 Janvier 2012. Nous allons donc mettre en place un évaluateur de module permettant de spécifier une plage de date au cours de laquelle un module doit être actif. Il s’appellera « dates.module.evaluator ».

Création de la classe Java

Notre évaluateur début par :
public class DatesModuleEvaluator implements ExtensionModuleEvaluator
Les paramètres attendus sont la date de début et la date de fin d’activité :
public static final String START_DATE = "startDate";
public static final String STOP_DATE = "stopDate";
public String[] getRequiredProperties() {
  return new String[] { START_DATE, STOP_DATE };
}

Il ne reste plus qu’à écrire la logique de l’évaluateur (code simplifié, pour bien faire il faudrait vérifier au préalable que les propriétés ont bien été définies) :
public boolean applyModule(RequestContext context, Map evaluationProperties) {
  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
  Date startDate = simpleDateFormat.parse(evaluationProperties.get(START_DATE));
  Date stopDate = simpleDateFormat.parse(evaluationProperties.get(STOP_DATE));
  Date today = new Date();
  return (today.after(startDate) && today.before(stopDate));
}

Référencement de l’évaluateur

Dans le fichier alfresco/web-extension/custom-module-evaluators-context.xml, nous définissons le bean suivant :
<bean id="dates.module.evaluator" class="fr.amexio.alfresco.web.extensibility.DatesModuleEvaluator"/>

Configuration du module avec notre évaluateur

Classe et fichier de contexte rassemblés dans un .jar dans WEB-INF/lib, Alfresco Share 4.0.c redémarré, on peut maintenant paramétrer notre module de la sorte :

Configuration du module "Happy New Year"

Et le 1er février, nous pourrons tranquillement « oublier » de désactiver le module, le message ne sera quand même plus affiché !

Cette entrée a été publiée dans Alfresco, avec comme mot(s)-clef(s) , , , , , . Vous pouvez la mettre en favoris avec ce permalien.

Une réponse à Souhaitez une bonne année à vos utilisateurs Alfresco (2/2)

  1. Ping : Pré-configurer les modules d’extension Share 4.0 | ECM & Co

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Protected by WP Anti Spam