Champ List
Un tableau de lignes, chacune modifiée dans un sous-formulaire
Un champ list affiche un tableau de lignes, chacune créée et modifiée dans un volet de sous-formulaire dédié (un modèle d’exploration). Il remplace le champ table, supprimé dans la 7.0.0.
Fonctionnalités clés
Le champ list offre les possibilités suivantes :
- Chaque ligne est modifiée dans un sous-formulaire plein écran, qui donne accès à tous les types de champ, y compris les listes imbriquées.
- Le sous-formulaire est un formulaire à part entière, de type
subform, et peut être réutilisé par plusieurs champs list dans différents formulaires (par ex. un seul sous-formulaireAddresspartagé par les clients, les fournisseurs, les commandes…). - Les propriétés de marqueur (
insertMarker,updateMarker,deleteMarker) permettent des modèles de playbook idempotents. - Avec
allowDelete: false, les lignes préexistantes sont protégées ; seules les lignes ajoutées pendant la session en cours (qui portent l’insertMarker) peuvent être supprimées. - La propriété
columnscontrôle quels champs du sous-formulaire apparaissent comme colonnes dans le tableau récapitulatif. - La sortie est toujours un tableau d’objets.
model,output,outputObjectetvalueColumndéclarés sur les champs du sous-formulaire sont respectés lors de la génération des extravars.
Déclaration d’un sous-formulaire
Un sous-formulaire est un formulaire à part entière avec type: subform, dans un fichier du dossier des formulaires comme n’importe quel autre formulaire. Il accepte le même tableau fields que tout autre formulaire, mais il n’apparaît jamais dans la liste des tuiles de formulaires et n’est jamais soumis directement.
- name: Address
type: subform
fields:
- name: street
type: text
label: Street
required: true
- name: city
type: text
label: City
required: true
- name: country
type: text
label: Country
Propriétés
Les propriétés disponibles pour un champ list, regroupées par usage :
| Attribut | Commentaires |
|---|---|
| basic | |
| name string / obligatoire / unique | Field name
This attribute represents the name of the form field. |
| type string / obligatoire | Field type
Other attributes might only be available for some field types. Valeur : list ExemplesText |
| label string | Field label
A friendly name/label for the field. Note: if not set, the field name is used as label, but not when type is html. Since 6.0.3: Supports placeholders for dynamic labels (e.g., |
| help string | Field help message
Some fields require additional help information. This help message will be shown below the field. Since 6.0.3: Supports placeholders for dynamic help text (e.g., |
| subform string / obligatoire | Name of the subform that defines one row
For a |
| data | |
| default many | Default value
The type of the value depends on the field type.
For |
| expression string | A javascript expression.
By default this javascript is evaluated on the server side and limited to predefined functions (for security). However in combination with tip: use the alias ExemplesGet a list of users from a rest api Filter and sort an array of objects Make a numbered list Use the alias `local` Use the alias `local_out` |
| runLocal boolean | Run an expression locally
When running expressions, by default they are run remotely on the server. Par défaut : false |
| dbConfig string, array or object | A database connection
When you want to query data from a database, you will need the proper connection information. Exemplesget information from a mysql database (legacy example - deprecated) get information from a mysql database (new example) get information from a mysql database (array example) get information from a mongodb |
| query string | The query to select data from a database
This is typically a classic SELECT statement. Every Exemplesget information from a mysql database get information from a mongodb |
| interaction | |
| dependencyFn string ajouté dans la version 4.0.0 | The dependency logical function
This attribute represents the logical function between multiple dependencies. Choix :
|
| dependencies list / elements=object | Show/hide this field based on the values or other fields
Each dependency element is either an object with the following 2 attributes:
Or with the following 2 attributes:
Use in combination with attribute ExemplesShow a field based on a checkbox Show a field if another field is valid Show a field based on 2 fields, using the 'or' function |
| allowInsert boolean | Allow table/list insert
A table or list can be used to modify existing data. If new data is not allowed, set this property to false. Par défaut : true |
| allowDelete boolean | Allow table/list delete
A table can be used to modify existing data. If you don’t was recoreds to be deleted, set this property to false. Par défaut : true |
| showLoadButton boolean ajouté dans la version 6.1.5 | Show load button for file import
Enables a “Load YAML” button that allows users to import data from .yml or .yaml files. For list fields, the YAML file must contain a valid array of objects. For yaml fields, the file can contain any valid YAML structure. Single objects are automatically wrapped in arrays for list fields. Par défaut : false ExemplesList with YAML import YAML field with file import |
| showDownloadButton boolean ajouté dans la version 6.1.5 | Show download button for file export
Enables a “Download” button that exports the field content as a .yml file. The filename is automatically generated from the field name. Par défaut : false |
| output | |
| output boolean ajouté dans la version 6.2.0 | Include field value as extravar
Form fields are by default sent as extravars. Par défaut : true |
| model string or array | Extravar modelling
By default, a field is sent as a root-extravar. ExemplesModel 2 fields together as a single object |
| deleteMarker string | Adds an additional deletemarker field
When you remove a record in a table, it gets removed. Since 6.4.1 the markers of a ExemplesMark delete record |
| insertMarker string | Adds an additional insertmarker field
When you add a record in a table, it simply gets added. ExemplesMark new record |
| updateMarker string ajouté dans la version 5.1.0 | Adds an additional updatemarker field
In addition to the insert and delete markers, you can also add an update marker. ExemplesMark updated record |
| security | |
| noLog boolean ajouté dans la version 2.2.3 | Disable backend logging
Disables logging in the backend, to hide passwords for example. Par défaut : false Exempleshide password in log |
| validation | |
| required boolean | Required field
Makes the field required. Par défaut : false |
| validIf object ajouté dans la version 2.2.4 | An field based validation (field must be true)
Enforces a validation where a referencing (expression) field must be true. This field requires an object with 2 attributes:
ExemplesIp must be pingable |
| validIfNot object ajouté dans la version 2.2.4 | An field based validation (field must be false)
Enforces a validation where a referencing (expression) field must be false. This field requires an object with 2 attributes:
ExemplesCheck if powered off |
| ignoreIncomplete boolean | Allow form submit on non-evaluated placeholders
When an expression-based field has placeholders, Par défaut : false |
| visualization | |
| group string | The field group name
With this attribute you can group fields together. |
| line string ajouté dans la version 4.0.3 | The field line name
With this attribute you can group fields in a single line together. |
| width string ajouté dans la version 4.0.3 | The field width
With this attribute you can set the width of a field. Choix :
ExemplesName and lastname |
| titleAdd string | Title shown in the subform pane when adding a new row
When you add a row through a |
| titleEdit string | Title shown in the subform pane when editing an existing row
When you edit a row through a |
| columns array | The list of columns visible in the dropdown/table
For an ExemplesShow only wanted columns |
Exemples
Sous-formulaire d’adresse partagé
Un sous-formulaire Address réutilisé par deux champs list du même formulaire :
- name: Address
type: subform
fields:
- name: street
type: text
label: Street
required: true
- name: city
type: text
label: City
required: true
- name: country
type: text
label: Country
- name: Create customer
type: ansible
playbook: customer.yaml
roles: [default]
fields:
- name: name
type: text
label: Customer name
required: true
- name: addresses
type: list
label: Addresses
subform: Address
columns:
- city
- country
titleAdd: Add address
titleEdit: Edit address
allowInsert: true
allowDelete: true
Suivi par marqueurs (compatible avec l’idempotence)
Les lignes préchargées sont protégées, et les marqueurs indiquent au playbook quelles lignes sont nouvelles, modifiées ou supprimées :
- name: people
type: list
label: People
subform: Person
allowDelete: false # preloaded rows are protected
insertMarker: added # session-added rows remain removable
updateMarker: updated
deleteMarker: removed
columns:
- name
- email
Pré-remplir les lignes
Une liste peut être pré-remplie depuis trois sources. Dans tous les cas, les lignes obtenues doivent être des objets dont les clés correspondent aux noms des champs du sous-formulaire référencé.
default statique
Des lignes écrites dans le formulaire lui-même :
- name: addresses
type: list
label: Addresses
subform: Address
columns:
- city
- country
default:
- street: Main 1
city: Brussels
country: BE
- street: Side 22
city: Paris
country: FR
Depuis une API REST (expression)
Des lignes chargées depuis une API REST par une expression côté serveur :
- name: users
type: list
label: Users
subform: User
columns:
- username
- email
expression: fn.fnRestBasic('get','https://api.example.com/users','','my_api_cred','')
Depuis une requête de base de données (dbConfig + query)
Des lignes chargées depuis une requête de base de données :
- name: servers
type: list
label: Servers
subform: Server
columns:
- hostname
- role
dbConfig: CMDB_CONN
query: SELECT hostname, role FROM servers WHERE active = 1
dbConfig nomme une base de données de Connexions > Bases de données (depuis la 7.5.0), ou sinon un identifiant de type base de données, comme avant (voir Les bases de données dans les formulaires).
Depuis une expression locale (runLocal)
Des lignes calculées dans le navigateur par une expression locale :
- name: ports
type: list
label: Open ports
subform: Port
columns:
- port
- protocol
runLocal: true
expression: |
[
{ port: 22, protocol: 'tcp' },
{ port: 80, protocol: 'tcp' },
{ port: 443, protocol: 'tcp' }
]
Listes imbriquées
Un sous-formulaire peut contenir son propre champ list, pour avoir une liste dans chaque ligne :
- name: Address
type: subform
fields:
- name: street
type: text
label: Street
- name: city
type: text
label: City
- name: Person
type: subform
fields:
- name: name
type: text
label: Name
required: true
- name: addresses
type: list
label: Addresses
subform: Address
columns:
- street
- city
- name: My Form
type: ansible
playbook: people.yaml
roles: [default]
fields:
- name: people
type: list
label: People
subform: Person
columns:
- name
- addresses
Accéder aux données du formulaire parent via __parent__
Quand l’éditeur de ligne d’un sous-formulaire s’ouvre, AnsibleForms injecte une variable __parent__ dans le sous-formulaire. Elle contient un instantané de toutes les valeurs des champs du formulaire parent, y compris les constantes et les vars.
Faites-y référence avec la syntaxe d’expression standard $(...) dans les définitions de champ du sous-formulaire :
- name: NodeConfig
type: subform
fields:
- name: node_name
type: text
label: Node name
required: true
- name: node_type
type: enum
# only offer gpu in production environments (parent field)
expression: |
'$(__parent__.environment)' === 'production'
? ['standard', 'high-memory', 'gpu']
: ['standard', 'high-memory']
runLocal: true
default: __auto__
- name: Deploy cluster
type: ansible
playbook: deploy.yml
roles: [default]
fields:
- name: environment
type: enum
values: [dev, staging, production]
required: true
- name: nodes
type: list
subform: NodeConfig
columns: [node_name, node_type]
__parent__est une aide propre au frontend. Elle est retirée des extravars Ansible et n’est jamais envoyée au playbook.