J’ai un objet métier comportant 2 champs de type Enuméré : Délégation et Filière. Dans la vue liste de l’objet métier, j’applique un filtre sur la Délégation qui affiche les données associées en résultat.
J’aimerais pouvoir appliquer un 2e filtre, cette fois sur le champ Filière. Ce dernier dépend du choix saisi dans Délégation. Or, dans la recherche par liste, j’ai toutes les valeurs de Filière qui me sont proposées. Alors que je ne souhaite afficher que les valeurs possibles de Filière associées à la valeur de Délégation. cf Capture d’écran.
J’ai essayé avec initRefSelect, setSearchSpec mais aussi en jouant sur l’alimentation des items de la liste dans le postLoad ou preSearch (cf code ci-dessous). Comme Gérard…en vain.
list.getAllItems().clear();
for (String row[] : g.query("select distinct lad_ref_filiere_code, lad_ref_filiere_libelle from lad_ref_filiere order by lad_ref_filiere_libelle asc")) {
list.putItem(row[0], row[1], true);
}
Le libellé apparaît plusieurs fois car j’ai l’impression qu’il charge tous les items du champ Filière. Les 2 listes Délégation et Filière de l’objet métier ConfFinanceurs (visible dans la capture d’écran) sont alimentées de manière dynamique.
A côté de cela, on a 2 objets métiers de configuration associées : RefDelegation et RefFiliere. Ils regroupent tous les champs possibles pour les délégations et filières. Les données dans ces 2 objets métiers sont chargées initialement à partir d’un import CSV. Ensuite, un utilisateur admin peut aller ajouter/supprimer/modifier des données sur ces 2 objets.
Dans l’objet métier ConfFinanceurs, lui aussi alimenté initialement avec un import CSV, on alimente les champs Delegation et Filiaire (tous les 2 de type Enuméré) en récupérant via une requête SQL SELECT les valeurs de champs des objets métiers RefDelegation et RefFiliere.
ObjectFieldList list = object.getField("ladConfFinanceursDelegation").getList();
list.getAllItems().clear();
for (String row[] : g.query("select distinct lad_ref_filiere_code, lad_ref_filiere_libelle from lad_ref_filiere order by lad_ref_filiere_libelle asc")) {
list.putItem(row[0], row[1], true);
}
Je ne sais pas si j’ai réussi à être clair. Peut-être que notre conception n’est pas optimale aussi.
Donc si j’ai bien compris, ces énumérés sont saisis par un admin métier.
S’il y a des duplications il faut peut être revoir comment vous créez ces énumérés. Attention également à la suppression d’un élément de la liste de référence et la gestion des records qui utilisent une valeur supprimée.
Comment gères-tu le filtre sur la liste des Filières selon ce qui est saisi dans Délégation au niveau de tes listes de références ? Est-ce que tu as modélisé un lien 1-N entre les deux listes ?
D’un point de vue conception, pourquoi ne pas avoir utilisé un lien vers un objet métier plutôt que 2 énumérés ?