Les listes de valeurs
Module d’exemple : hellotypes, propriété lovscopes.
Une liste de valeurs (LOV) propose des suggestions ou impose un choix fermé sur un élément string/int/float. Elle existe à trois portées différentes.
Portée élément (locale)
"lovelement": {
"type": "string",
"listOfValues": [
["e1", "Valeur 1"],
["e2", "Valeur 2"]
]
}Un tableau littéral de paires [clé, libellé], propre à cet élément, jamais partagé.
Portée module
{
"globallov": {
"malov": {
"type": "string",
"label": "Ma liste",
"values": [["mod1", "Valeur 1"], ["mod2", "Valeur 2"]]
}
},
"p": {
"mapropriete": {
"e": {
"monelement": { "type": "string", "listOfValues": "malov" }
}
}
}
}Une liste nommée, déclarée dans la section globallov du même fichier JSON, partagée par tous les éléments du module qui la référencent par son nom — invisible des autres modules.
Portée contrôleur
"monelement": {
"type": "string",
"listOfValues": "availableconfs",
"listOfValuesIsExternal": true
}Une liste maintenue par le contrôleur lui-même, partagée par tous les modules du serveur. Quelques listes contrôleur existantes : availableconfs (configurations disponibles), indiconfigurations, optics, servers, equipments, locations, et deux familles générées dynamiquement à chaque module chargé — loadedModules-<type> et loadedFamilies-<famille> (voir Relation maître/esclave).
listOfValuesIsExternal: true est ce qui bascule la portée de “module” à “contrôleur” — sans lui, listOfValues chercherait une liste du même nom dans le globallov du module, pas dans le contrôleur.
constrained : liste fermée ou simple suggestion
Par défaut, une liste de valeurs n’est qu’une suggestion (champ libre avec autocomplétion). setLovConstrained(true) en fait un choix fermé (menu déroulant, valeurs de la liste uniquement) :
getEltString("lovscopes", "monelement")->setLovConstrained(true);constrained se règle uniquement en code, dans le constructeur du module — il n’existe pas de clé JSON équivalente à directedit/autoupdate pour ce réglage.
constrained est un réglage par élément, indépendant de la portée de la liste qu’il affecte — un élément peut constrain une liste de n’importe laquelle des trois portées ci-dessus.
Les tableaux de paires [["clé", "Libellé"], ...] ci-dessus sont le format du fichier JSON source d’un module — celui que le développeur écrit. Une fois dumpé vers le client, listOfValues devient un objet {"clé": "Libellé"}, et la distinction module/contrôleur se retrouve sous d’autres noms, globallov/lovScope, plutôt que listOfValues/listOfValuesIsExternal. Les deux formats décrivent la même chose à deux endroits différents de la chaîne — voir la documentation du protocole client pour le format fil en détail.