Ajouter un filtre par défaut modifiable

Bonjour,

Je souhaite ajouter un filtre par défaut sur un champ avec la possibilité pour l’utilisateur de le modifier.

J’ai essayé avec le code ci-dessous :

public void initList(ObjectDB parent) {
    ObjectField  field = this.getField("myObjectField");
    String filter = "myfilter";
    if (parent == null) {
        if (field.getFilter().isEmpty() || "%".equals(field.getFilter())) {
            field.setFilter(filter);
        }
    } 
}

Le filtre est bien appliqué par défaut, l’utilisateur peut le modifier mais il ne peut pas supprimer.
Je n’arrive pas à faire la différence entre :

  • le premier affichage de la liste où le champ n’est pas filtré
  • La suppression du filtre par l’utilisateur

Quelles sont les bonnes practices pour implémenter mon besoin?

L’initList est appelé avant chaque affichage de liste. Donc votre code repositionne le filtre à chaque fois, impossible de le retirer.

La question est plutôt de savoir dans quels cas il faut remettre un filtre par défaut si l’utilisateur le retire ?

  • Si c’est un filtre uniquement au premier affichage de la liste, vous devez gérer un flag (boolean membre de la classe) dans votre objet pour que l’initList ne le fasse qu’une fois :
    if (!flag) { flag=true; setFieldFilter(…); }

  • ou mettre le filtre qu’au niveau de postLoad de votre instance car ce hook est appelé qu’une seule fois par instance

  • On peut aussi créer une Action de Liste qui positionne le filtre (ex: “dossiers de la semaine”), que l’utilisateur pourra retirer tant qu’il ne repasse pas par l’action. Je préfère cette approche car l’utilisateur à le choix et comprend mieux ce qui se passe

  • enfin si vous connaissez un contexte de navigation, c’est plutôt l’appelant (ou ce qui se passe avant) qui doit positionner le filtre.

    • Exemple l’initUpdate d’un formulaire parent qui récupérerait l’objet fils pour lui mettre le filtre via getGrant().getPanelObject(…).setFieldFilter(…).

    • On peut aussi mettre un contexte de navigation ou d’usage dans les paramètre de l’objet ou des la session (ObjectDB ou Grant via set/getParameter), pour déterminer s’il faut le filtre ou non suivant par où on est passé (setParameter) dans l’initList (getParameter).

Pour référence: