Las listas de valores
Módulo de ejemplo: hellotypes, propiedad lovscopes.
Una lista de valores (LOV) propone sugerencias o impone una elección cerrada sobre un elemento string/int/float. Existe en tres alcances distintos.
Alcance elemento (local)
"lovelement": {
"type": "string",
"listOfValues": [
["e1", "Valeur 1"],
["e2", "Valeur 2"]
]
}Un arreglo literal de pares [clave, etiqueta], propio de este elemento, nunca compartido.
Alcance módulo
{
"globallov": {
"malov": {
"type": "string",
"label": "Ma liste",
"values": [["mod1", "Valeur 1"], ["mod2", "Valeur 2"]]
}
},
"p": {
"mapropriete": {
"e": {
"monelement": { "type": "string", "listOfValues": "malov" }
}
}
}
}Una lista con nombre, declarada en la sección globallov del mismo archivo JSON, compartida por todos los elementos del módulo que la referencian por su nombre — invisible para los demás módulos.
Alcance controlador
"monelement": {
"type": "string",
"listOfValues": "availableconfs",
"listOfValuesIsExternal": true
}Una lista mantenida por el propio controlador, compartida por todos los módulos del servidor. Algunas listas de controlador ya existentes: availableconfs (configuraciones disponibles), indiconfigurations, optics, servers, equipments, locations, y dos familias generadas dinámicamente con cada módulo cargado — loadedModules-<type> y loadedFamilies-<familia> (ver Relación maestro/esclavo).
listOfValuesIsExternal: true es lo que cambia el alcance de “módulo” a “controlador” — sin él, listOfValues buscaría una lista del mismo nombre en el globallov del módulo, no en el controlador.
constrained: lista cerrada o simple sugerencia
Por defecto, una lista de valores es solo una sugerencia (campo libre con autocompletado). setLovConstrained(true) la convierte en una elección cerrada (menú desplegable, solo los valores de la lista):
getEltString("lovscopes", "monelement")->setLovConstrained(true);constrained solo se ajusta en código, en el constructor del módulo — no existe una clave JSON equivalente a directedit/autoupdate para este ajuste.
constrained es un ajuste por elemento, independiente del alcance de la lista que afecta — un elemento puede restringir (constrain) una lista de cualquiera de los tres alcances anteriores.
Los arreglos de pares [["clave", "Etiqueta"], ...] anteriores son el formato del archivo JSON fuente de un módulo — el que escribe el desarrollador. Una vez volcado hacia el cliente, listOfValues se convierte en un objeto {"clave": "Etiqueta"}, y la distinción módulo/controlador se encuentra bajo otros nombres, globallov/lovScope, en lugar de listOfValues/listOfValuesIsExternal. Ambos formatos describen la misma cosa en dos puntos distintos de la cadena — ver la documentación del protocolo cliente para el formato en el cable en detalle.