Le liste di valori

Modulo di esempio: hellotypes, proprietà lovscopes.

Una lista di valori (LOV) propone suggerimenti o impone una scelta chiusa su un elemento string/int/float. Esiste in tre ambiti diversi.

Ambito elemento (locale)

"lovelement": {
  "type": "string",
  "listOfValues": [
    ["e1", "Valeur 1"],
    ["e2", "Valeur 2"]
  ]
}

Un array letterale di coppie [chiave, etichetta], proprio a questo elemento, mai condiviso.

Ambito modulo

{
"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 nome, dichiarata nella sezione globallov dello stesso file JSON, condivisa da tutti gli elementi del modulo che la referenziano per nome — invisibile dagli altri moduli.

Ambito controller

"monelement": {
  "type": "string",
  "listOfValues": "availableconfs",
  "listOfValuesIsExternal": true
}

Una lista mantenuta dal controller stesso, condivisa da tutti i moduli del server. Alcune liste controller esistenti: availableconfs (configurazioni disponibili), indiconfigurations, optics, servers, equipments, locations, e due famiglie generate dinamicamente a ogni modulo caricato — loadedModules-<type> e loadedFamilies-<famille> (vedi Relazione master/slave).

listOfValuesIsExternal: true è ciò che fa passare l’ambito da “modulo” a “controller” — senza di esso, listOfValues cercherebbe una lista con lo stesso nome nel globallov del modulo, non nel controller.

constrained: lista chiusa o semplice suggerimento

Per default, una lista di valori è solo un suggerimento (campo libero con autocompletamento). setLovConstrained(true) ne fa una scelta chiusa (menu a tendina, solo i valori della lista):

getEltString("lovscopes", "monelement")->setLovConstrained(true);
Nessuna chiave JSON per constrained

constrained si imposta solo in codice, nel costruttore del modulo — non esiste una chiave JSON equivalente a directedit/autoupdate per questa impostazione.

constrained è un’impostazione per elemento, indipendente dall’ambito della lista che interessa — un elemento può rendere constrained una lista di qualsiasi dei tre ambiti sopra.

Formato sorgente (modulo) vs formato filo (client)

Gli array di coppie [["chiave", "Etichetta"], ...] sopra sono il formato del file JSON sorgente di un modulo — quello che lo sviluppatore scrive. Una volta dumpato verso il client, listOfValues diventa un oggetto {"chiave": "Etichetta"}, e la distinzione modulo/controller si ritrova sotto altri nomi, globallov/lovScope, piuttosto che listOfValues/listOfValuesIsExternal. I due formati descrivono la stessa cosa in due punti diversi della catena — vedi la documentazione del protocollo client per il formato filo in detail.