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);
Kein JSON-Schlüssel für constrained

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.

Quellformat (Modul) vs. Übertragungsformat (Client)

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.