Suppression de choix dans une liste de valeur et anciennes données à préserver

Bonjour,
Est-il possible d’enlever un choix dans une liste de valeurs (pour les attributs énumérés), ou rendre ce choix non sélectionnable ?
Si je supprime bêtement le choix de la liste de valeurs, les anciennes demandes (dans le cadre d’une application de création de demandes de formations) qui utilisaient ce choix, voient leur champ être “vidé” (c’est un champ non éditable à ce moment là).

Merci d’avance.

De mémoire il faut mettre une valeur négative sur l’ordre de la valeur de la liste de valeur.

Mais, plus globalement, les listes de valeurs ne sont sensées que représenter des listes “immuables” (genre la liste des jours de la semaine, des mois, des civilités, etc.). Si on parle de données qui “vivent” il vaut mieux modéliser ça avec un objet métier.

La donnée en question n’était pas sensée changer à l’origine, je suppose. Je prend note pour la prochaine fois.

Passer l’ordre en négatif semble avoir le même effet de “supprimer” la valeur dans les anciennes demandes.

OK je ne vois pas de solution à part laisser la valeur dans la liste mais en la mettant à la fin avec un préfix sur la traduction genre “[NE PLUS UTILISER]” et, si besoin, ajouter une règle de gestion pour empêcher de changer la valeur de l’attribut vers cette valeur obsolète dans le postValidate:

ObjectField f = getField("monEnumField");
if (f.hasChanged() && "MON_CODE".equals(f.getValue()))
    msgs.add(Message.formatError("MY_ERR_VALEUR_OBSOLETE", f.getDisplay(), f.getName()));

PS: il est aussi sans doute possible de mettre un bout de JS spécifique qui disable l’entrée dans la select box, bien entendu ce n’est que du “confort utilisateur” sur la UI, ça ne dispense en aucun cas de la règle de gestion serveur ci-dessus (pour les cas où une mise à jour ne serait pas effectuée via la UI mais via un import de données, un appel de webservice, du code serveur, …)

Les items de liste ont une propriété enabled.
Dans le initUpdate de votre objet ajoutez :

getField("myEnum").getList().getItem("MYCODE",true).setEnabled(false);
2 Likes

Effectivement c’est mieux. Est-ce que cette propriété rend inutile la règle de gestion que j’ai indiquée ou est-ce purement UI ?

C’est uniquement UI, pour le rendre sélectionnable ou non.
Le back ne contrôle que l’existence de l’item dans la liste au moment du validate.

On pourrait le rendre bloquant mais cela interdirait la mise à jour d’ancien dossier avec l’ancien code, vu du back le code reste valide.

Bref, if faut bien coder un postValidate qui tient compte du dossier (date…) pour dire si le code est toujours valable ou pas dans votre contexte en cas de mise à jour par sécurité.

Je vais faire ça, merci en tout cas.

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.