Veld List
Een tabel met rijen, elk bewerkt in een subformulier
Een list-veld toont een tabel met rijen, die elk worden aangemaakt en bewerkt in een eigen paneel met een subformulier (een drilldownpatroon). Het vervangt het veld table, dat in 7.0.0 is verwijderd.
Belangrijkste kenmerken
Het list-veld biedt de volgende mogelijkheden:
- Elke rij wordt bewerkt in een subformulier op volledig scherm, met toegang tot elk veldtype, geneste lijsten inbegrepen.
- Het subformulier is een eigen formulier, van type
subform, en kan worden hergebruikt in meerdere list-velden in verschillende formulieren (bijvoorbeeld één subformulierAddressdat klanten, leveranciers, orders… delen). - Markeringseigenschappen (
insertMarker,updateMarker,deleteMarker) ondersteunen idempotente playbookpatronen. - Met
allowDelete: falsezijn bestaande rijen beschermd; alleen rijen die in de huidige sessie zijn toegevoegd (met deinsertMarker) kunnen worden verwijderd. - De eigenschap
columnsbepaalt welke velden van het subformulier als kolommen in de overzichtstabel verschijnen. - De uitvoer is altijd een array van objecten.
model,output,outputObjectenvalueColumndie op velden van het subformulier zijn gedeclareerd, worden gerespecteerd wanneer de extravars worden gegenereerd.
Declaratie van het subformulier
Een subformulier is een eigen formulier met type: subform, in een bestand van de formulierenmap zoals elk ander formulier. Het accepteert dezelfde array fields als elk ander formulier, maar het verschijnt nooit in de lijst met formuliertegels en wordt nooit rechtstreeks verzonden.
- 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
Eigenschappen
De eigenschappen die beschikbaar zijn voor een list-veld, gegroepeerd naar doel:
| Attribuut | Opmerkingen |
|---|---|
| basic | |
| name string / verplicht / uniek | Field name
This attribute represents the name of the form field. |
| type string / verplicht | Field type
Other attributes might only be available for some field types. Waarde: list VoorbeeldenText |
| 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 / verplicht | 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 VoorbeeldenGet 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. Standaard: 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. Voorbeeldenget 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 Voorbeeldenget information from a mysql database get information from a mongodb |
| interaction | |
| dependencyFn string toegevoegd in versie 4.0.0 | The dependency logical function
This attribute represents the logical function between multiple dependencies. Keuzes:
|
| 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 VoorbeeldenShow 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. Standaard: 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. Standaard: true |
| showLoadButton boolean toegevoegd in versie 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. Standaard: false VoorbeeldenList with YAML import YAML field with file import |
| showDownloadButton boolean toegevoegd in versie 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. Standaard: false |
| output | |
| output boolean toegevoegd in versie 6.2.0 | Include field value as extravar
Form fields are by default sent as extravars. Standaard: true |
| model string or array | Extravar modelling
By default, a field is sent as a root-extravar. VoorbeeldenModel 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 VoorbeeldenMark delete record |
| insertMarker string | Adds an additional insertmarker field
When you add a record in a table, it simply gets added. VoorbeeldenMark new record |
| updateMarker string toegevoegd in versie 5.1.0 | Adds an additional updatemarker field
In addition to the insert and delete markers, you can also add an update marker. VoorbeeldenMark updated record |
| security | |
| noLog boolean toegevoegd in versie 2.2.3 | Disable backend logging
Disables logging in the backend, to hide passwords for example. Standaard: false Voorbeeldenhide password in log |
| validation | |
| required boolean | Required field
Makes the field required. Standaard: false |
| validIf object toegevoegd in versie 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:
VoorbeeldenIp must be pingable |
| validIfNot object toegevoegd in versie 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:
VoorbeeldenCheck if powered off |
| ignoreIncomplete boolean | Allow form submit on non-evaluated placeholders
When an expression-based field has placeholders, Standaard: false |
| visualization | |
| group string | The field group name
With this attribute you can group fields together. |
| line string toegevoegd in versie 4.0.3 | The field line name
With this attribute you can group fields in a single line together. |
| width string toegevoegd in versie 4.0.3 | The field width
With this attribute you can set the width of a field. Keuzes:
VoorbeeldenName 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 VoorbeeldenShow only wanted columns |
Voorbeelden
Gedeeld adressubformulier
Eén subformulier Address, hergebruikt door twee list-velden van hetzelfde formulier:
- 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
Bijhouden met markeringen (idempotent)
Vooraf geladen rijen zijn beschermd, en de markeringen vertellen het playbook welke rijen nieuw, gewijzigd of verwijderd zijn:
- 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
Rijen vooraf vullen
Een lijst kan vanuit drie bronnen vooraf worden gevuld. In elk geval moeten de resulterende rijen objecten zijn waarvan de sleutels overeenkomen met de veldnamen van het subformulier waarnaar wordt verwezen.
Statische default
Rijen die in het formulier zelf staan:
- 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
Uit een REST API (expression)
Rijen die door een expressie aan de serverkant uit een REST API worden geladen:
- name: users
type: list
label: Users
subform: User
columns:
- username
- email
expression: fn.fnRestBasic('get','https://api.example.com/users','','my_api_cred','')
Uit een databasequery (dbConfig + query)
Rijen die uit een databasequery worden geladen:
- name: servers
type: list
label: Servers
subform: Server
columns:
- hostname
- role
dbConfig: CMDB_CONN
query: SELECT hostname, role FROM servers WHERE active = 1
dbConfig noemt een database uit Verbindingen > Databases (vanaf 7.5.0), of anders een referentie van het type database, zoals voorheen (zie Databases in formulieren).
Uit een lokale expressie (runLocal)
Rijen die in de browser door een lokale expressie worden berekend:
- 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' }
]
Geneste lijsten
Een subformulier kan een eigen list-veld bevatten, voor een lijst binnen elke rij:
- 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
Gegevens van het bovenliggende formulier lezen via __parent__
Wanneer de rij-editor van een subformulier opent, voegt AnsibleForms een variabele __parent__ aan het subformulier toe. Die bevat een momentopname van alle veldwaarden van het bovenliggende formulier, inclusief constanten en vars.
Verwijs ernaar met de gewone expressiesyntax $(...) in de velddefinities van het subformulier:
- 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__is een hulpmiddel dat alleen in de frontend bestaat. Het wordt uit de Ansible-extravars verwijderd en nooit naar het playbook gestuurd.