Die Wertelisten
Beispielmodul: hellotypes, Property lovscopes.
Eine Werteliste (LOV, List of Values) schlägt Vorschläge vor oder erzwingt eine geschlossene Auswahl auf einem string/int/float-Element. Sie existiert in drei unterschiedlichen Geltungsbereichen.
Geltungsbereich Element (lokal)
"lovelement": {
"type": "string",
"listOfValues": [
["e1", "Valeur 1"],
["e2", "Valeur 2"]
]
}Ein literales Array von Paaren [Schlüssel, Label], nur für dieses Element, nie geteilt.
Geltungsbereich Modul
{
"globallov": {
"malov": {
"type": "string",
"label": "Ma liste",
"values": [["mod1", "Valeur 1"], ["mod2", "Valeur 2"]]
}
},
"p": {
"mapropriete": {
"e": {
"monelement": { "type": "string", "listOfValues": "malov" }
}
}
}
}Eine benannte Liste, deklariert im Abschnitt globallov der gleichen JSON-Datei, geteilt von allen Elementen des Moduls, die sie über ihren Namen referenzieren — unsichtbar für andere Module.
Geltungsbereich Controller
"monelement": {
"type": "string",
"listOfValues": "availableconfs",
"listOfValuesIsExternal": true
}Eine vom Controller selbst verwaltete Liste, geteilt von allen Modulen des Servers. Einige vorhandene Controller-Listen: availableconfs (verfügbare Konfigurationen), indiconfigurations, optics, servers, equipments, locations, sowie zwei Familien, die dynamisch bei jedem geladenen Modul erzeugt werden — loadedModules-<type> und loadedFamilies-<famille> (siehe Master/Slave-Beziehung).
listOfValuesIsExternal: true ist das, was den Geltungsbereich von “Modul” auf “Controller” umschaltet — ohne diese Einstellung würde listOfValues nach einer gleichnamigen Liste im globallov des Moduls suchen, nicht im Controller.
constrained: geschlossene Liste oder einfacher Vorschlag
Standardmäßig ist eine Werteliste nur ein Vorschlag (freies Feld mit Autovervollständigung). setLovConstrained(true) macht daraus eine geschlossene Auswahl (Dropdown-Menü, nur Werte aus der Liste):
getEltString("lovscopes", "monelement")->setLovConstrained(true);constrained wird ausschließlich im Code gesetzt, im Konstruktor des Moduls — es gibt keinen JSON-Schlüssel, der directedit/autoupdate für diese Einstellung entspräche.
constrained ist eine Einstellung pro Element, unabhängig vom Geltungsbereich der Liste, die sie betrifft — ein Element kann eine Liste aus jedem der drei oben genannten Geltungsbereiche einschränken.
Die obigen Arrays von Paaren [["clé", "Libellé"], ...] sind das Format der Quell-JSON-Datei eines Moduls — das, was der Entwickler schreibt. Einmal zum Client gedumpt, wird listOfValues zu einem Objekt {"clé": "Libellé"}, und die Unterscheidung Modul/Controller findet sich unter anderen Namen wieder, globallov/lovScope statt listOfValues/listOfValuesIsExternal. Die beiden Formate beschreiben dieselbe Sache an zwei verschiedenen Stellen der Kette — siehe die Dokumentation des Client-Protokolls für das Übertragungsformat im Detail.