Segnaposto

Fare riferimento a un altro campo, a una costante o all’utente corrente con $(...)

  1. Che cos’è un segnaposto
  2. A cosa può fare riferimento un segnaposto
  3. Accedere a una parte del valore
  4. Come viene inserito il valore
    1. Backtick e ${ in un valore
  5. Vedi anche

Che cos’è un segnaposto

Un segnaposto è un riferimento scritto come $(reference). Viene sostituito da un valore prima che il testo che lo contiene venga usato.

I segnaposto funzionano in expression, query e default di un campo (valutato con evalDefault), e in label, help e placeholder. Un campo che contiene un segnaposto dipende dal campo che nomina: attende finché quel campo ha un valore, e viene valutato di nuovo ogni volta che quel valore cambia. È così che si costruiscono i menu a tendina a cascata.

- name: city
  type: enum
  values: [Amsterdam, Brussels]
- name: datacenter
  type: enum
  dbConfig: CMDB            # a database of Connections > Databases
  query: select name from cmdb.datacenter where city='$(city)'

A cosa può fare riferimento un segnaposto

Un segnaposto nomina un campo del modulo, oppure uno di questi, che ogni modulo ha:

Riferimento Cosa contiene
$(field) il valore di un altro campo del modulo
$(name), una costante una costante di config.yaml, o un valore dai varsFiles del modulo
$(__user__) l’utente che ha effettuato l’accesso: username, type, groups, roles
$(__parent__.field) in un sottomodulo (una riga di lista, un passo di wizard), un valore del modulo padre
expression: "'$(__user__.username)'"
expression: $(__user__.groups)

Accedere a una parte del valore

La notazione a punti e a indici legge una parte di un valore, purché il percorso contenga solo lettere, cifre, _, -, . e [n]:

Segnaposto Su Restituisce
$(field) un campo di testo, numero o password il valore
$(field) un enum di record la placeholderColumn del record selezionato, altrimenti la sua prima colonna
$(field.col) un enum di record quella colonna del record selezionato
$(field) un enum con multiple: true la colonna scelta di ogni record selezionato, come array
$(field) un’espressione, una lista o una costante l’intero valore (una lista restituisce le sue righe)
$(field.a.b), $(f[0].x) un’espressione, una lista o una costante quella parte dell’oggetto o dell’array

Impostando placeholderColumn: "*" su un enum, $(field) restituisce l’intero record selezionato invece di una colonna.

- name: city
  type: enum
  dbConfig: CMDB
  query: select id, name from cmdb.city
  valueColumn: name
  placeholderColumn: id        # $(city) gives the id; $(city.name) still gives the name
- name: servers
  type: expression
  expression: "[{name: 'web1'}, {name: 'web2'}]"
  runLocal: true
- name: first_server
  type: expression
  expression: $(servers[0].name)   # 'web1'
  runLocal: true

Come viene inserito il valore

Il modo in cui un valore viene scritto nel testo dipende da dove si trova il segnaposto.

Dove Esempio Diventa
un’espressione, fuori dagli apici $(count) + 1 un letterale JavaScript: un numero resta un numero, un testo diventa una stringa tra apici, un oggetto o un array un letterale
un’espressione, l’intera stringa tra apici fn.fnLs('$(dir)') lo stesso letterale, apici compresi, così un valore che contiene un apice non può uscirne
un’espressione, dentro una stringa più lunga '$(dir)/vars' il testo, con l’escape per quella stringa
una query, un’etichetta, un testo di aiuto where city='$(city)' il testo

Un campo i cui segnaposto non possono ancora essere risolti tutti non viene valutato; con ignoreIncomplete: true un valore mancante viene invece scritto come undefined.

Backtick e ${ in un valore

Dalla 7.3.0 il valore di un campo non può essere eseguito come codice quando il server lo scrive in un’espressione (espressioni remote, validazione all’avvio, MCP e chat). Un backtick o ${ nel valore viene scritto come escape unicode (\u0060, \u0024{), così resta testo anche dentro un template literal. Le espressioni lato server rifiutano del tutto i template literal; per quelli usa runLocal.

Un’espressione runLocal valutata nel browser inserisce il valore come indicato nella tabella sopra, senza quell’escape, quindi lì non mettere un segnaposto dentro un template literal.


Vedi anche

Pagine correlate e voci delle FAQ: