Récupérer une “liste liée par défaut” quand l’attribut maître de la liste liée est vide

Version 6.2.15

Description

Bonjour,

Je me permets de relancer ce point suite à un échange de septembre au sujet des **listes liées dépendantes d’un attribut ) (Liste vide si aucun code de liste lié sélectionnée)

Contexte

Dans nos cas d’usage, l’attribut LegalTextScope (Importateur / Filiale) détermine la liste liée de LegalTextGeographicalZone.

Cependant, pour certains types de documents, le scope n’est pas affiché et peut donc être vide sans que l’utilisateur puisse le modifier.

Aujourd’hui, cela affiche « Aucun résultat trouvé », et nous devons gérer le cas côté Java pour forcer une liste par défaut (LBC_LIST_COUNTRY).

Java code
String[] confirmFields = {
    "lbcConfirmAddCountry",
    "lbcConfirmAddGeographicalZone",
    "lbcConfirmUpdateCountryMaster"
};

String scope = getFieldValue("LegalTextScope");

if (Tool.isEmpty(scope)) {
    // Cas 1 : scope vide → charger la liste LBC_LIST_COUNTRY manuellement
    for (String fieldName : confirmFields) {
        ObjectField cf = action.getConfirmField(lang, fieldName);
        if (cf == null) continue;

        ObjectFieldList defaultList = new ObjectFieldList(cf);
        defaultList.load(this, "LBC_LIST_COUNTRY", getGrant());
        cf.setList(defaultList);
    }
} else {
    // Cas 2 : scope renseigné → réutiliser la liste liée de LegalTextGeographicalZone
    ObjectField geographicalZoneField = getField("LegalTextGeographicalZone");
    ObjectFieldList list = (geographicalZoneField != null) ? geographicalZoneField.getList() : null;

    for (String fieldName : confirmFields) {
        ObjectField cf = action.getConfirmField(lang, fieldName);
        if (cf != null) cf.setList(list);
    }
}

Cette logique fonctionne, mais elle ajoute une dette technique sur plusieurs attributs liés à cette dépendance, puisqu’il faut gérer manuellement les cas où le scope est vide.
Idem quand il existe un troisième code, qui doit obligatoirement être lié à une liste, même s’il pourrait simplement reprendre la liste par défaut.

Proposition :

Récuperer en standard la liste liée par défaut qui s’appliquera automatiquement quand le code maître est vide ou non défini — à l’image d’une valeur par défaut pour les énumérés simples (Liste de l’attribut visé par défaut).

Bien cordialement,
Hamza

Bonjour,

Si je reformule, le besoin est de pouvoir avoir une liste liée par défaut lorsque le champ père est vide :

  • Il faudrait pouvoir rendre le champ fll_code_id facultatif dans l’objet FieldListLink
  • ainsi on pourrait dire que pour le champ “Scope”, il y a une liste liée sans code particulier
  • Le runtime devra mapper la valeur vide avec cette liste afin de la charger correctement

On va regarder, ça ne semble pas trop compliqué de gérer le valeur “vide” comme un code lié à une autre liste.

2 Likes

Hello François,

Merci pour ton retour !

Je me demandais s’il ne serait pas possible d’envisager une approche un peu plus implicite :

Si aucune correspondance explicite n’est trouvée dans FieldListLink (par exemple quand le code parent est vide ou non existant), le socle pourrait simplement conserver la définition de l’ENUM configurée sur le champ.

Cela permettrait de garder un comportement par défaut cohérent — la liste d’origine reste disponible quand aucun code n’est défini — sans avoir à créer un lien spécifique avec un code NULL.

Ce serait une solution plus légère côté configuration, tout en restant alignée avec le fonctionnement habituel des ENUM simples.

Qu’en penses-tu ?

Bien à toi,
Hamza

Je comprends mais le soucis avec cette approche est de créer un “breaking change”.
Actuellement, la liste liée est vide tant que rien n’est sélectionné.
En général on met une liste bidon ou une des listes possibles sur le champ lié.

Comment ferait-on pour avoir le comportement actuel ?

De mon point de vue, le code “vide” doit être lié à une liste explicitement ou pas.

1 Like

Ça marche, je comprends le risque de breaking change, c’est logique de ne pas modifier le comportement par défaut. La proposition nous convient très bien dans ce cadre.

Peut-être qu’à terme, il pourrait être utile d’avoir un petit mécanisme d’audit ou de notification (par exemple dans les logs ou un contrôle d’intégrité) pour signaler les cas où une valeur d’ENUM est manquante dans la liste liée.

Merci pour tes explications ! :slight_smile:

Hamza

L’audit ne peut pas savoir si le fait de ne pas avoir de liste liée est normal ou pas.
Dans un cas général, il est tout à fait normal de ne pas avoir un sous-type associé à chaque type.

Exemple sur un Attribut : le type “Image” n’a pas de recherche possible, il n’y a pas de liste liée pour ce type / recherche.

Il faudrait paramétrer “je sais que c’est vide dans ce cas” pour que l’audit soit passant, mais c’est une autre histoire de faux positif à gérer qq part.

En attendant d’être remplacé par une IA qui fera tout ça très bien, le besoin initial sera livré de façon locale et artisanale en 6.3 :wink:

1 Like

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