List-Feld
Eine Tabelle aus Zeilen, jede in einem Unterformular bearbeitet
Ein list-Feld zeigt eine Tabelle aus Zeilen, die jeweils in einem eigenen Unterformular-Bereich erstellt und bearbeitet werden (ein Drilldown-Muster). Es ersetzt das Feld table, das in 7.0.0 entfernt wurde.
Hauptfunktionen
Das list-Feld bietet folgende Möglichkeiten:
- Jede Zeile wird in einem Unterformular im Vollbild bearbeitet, mit Zugriff auf alle Feldtypen, einschließlich verschachtelter Listen.
- Das Unterformular ist ein eigenes Formular vom Typ
subformund kann in mehreren list-Feldern verschiedener Formulare wiederverwendet werden (z. B. ein einziges UnterformularAddress, das Kunden, Lieferanten, Bestellungen… gemeinsam nutzen). - Die Marker-Eigenschaften (
insertMarker,updateMarker,deleteMarker) unterstützen idempotente Playbook-Muster. - Bei
allowDelete: falsesind bereits vorhandene Zeilen geschützt; nur in der aktuellen Sitzung hinzugefügte Zeilen (mit deminsertMarker) können gelöscht werden. - Die Eigenschaft
columnssteuert, welche Felder des Unterformulars als Spalten in der Übersichtstabelle erscheinen. - Die Ausgabe ist immer ein Array von Objekten.
model,output,outputObjectundvalueColumn, die auf Feldern des Unterformulars deklariert sind, werden beim Erzeugen der Extravars berücksichtigt.
Deklaration des Unterformulars
Ein Unterformular ist ein eigenes Formular mit type: subform, in einer Datei des Formularordners wie jedes andere Formular. Es akzeptiert dasselbe Array fields wie jedes andere Formular, erscheint aber nie in der Kachelliste der Formulare und wird nie direkt abgesendet.
- 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
Eigenschaften
Die für ein list-Feld verfügbaren Eigenschaften, nach Zweck gruppiert:
| Attribut | Kommentare |
|---|---|
| basic | |
| name string / erforderlich / eindeutig | Field name
This attribute represents the name of the form field. |
| type string / erforderlich | Field type
Other attributes might only be available for some field types. Wert: list BeispieleText |
| 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 / erforderlich | 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 BeispieleGet 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. Standard: 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. Beispieleget 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 Beispieleget information from a mysql database get information from a mongodb |
| interaction | |
| dependencyFn string hinzugefügt in Version 4.0.0 | The dependency logical function
This attribute represents the logical function between multiple dependencies. Auswahlmöglichkeiten:
|
| 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 BeispieleShow 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. Standard: 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. Standard: true |
| showLoadButton boolean hinzugefügt in 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. Standard: false BeispieleList with YAML import YAML field with file import |
| showDownloadButton boolean hinzugefügt in 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. Standard: false |
| output | |
| output boolean hinzugefügt in Version 6.2.0 | Include field value as extravar
Form fields are by default sent as extravars. Standard: true |
| model string or array | Extravar modelling
By default, a field is sent as a root-extravar. BeispieleModel 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 BeispieleMark delete record |
| insertMarker string | Adds an additional insertmarker field
When you add a record in a table, it simply gets added. BeispieleMark new record |
| updateMarker string hinzugefügt in Version 5.1.0 | Adds an additional updatemarker field
In addition to the insert and delete markers, you can also add an update marker. BeispieleMark updated record |
| security | |
| noLog boolean hinzugefügt in Version 2.2.3 | Disable backend logging
Disables logging in the backend, to hide passwords for example. Standard: false Beispielehide password in log |
| validation | |
| required boolean | Required field
Makes the field required. Standard: false |
| validIf object hinzugefügt in 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:
BeispieleIp must be pingable |
| validIfNot object hinzugefügt in 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:
BeispieleCheck if powered off |
| ignoreIncomplete boolean | Allow form submit on non-evaluated placeholders
When an expression-based field has placeholders, Standard: false |
| visualization | |
| group string | The field group name
With this attribute you can group fields together. |
| line string hinzugefügt in Version 4.0.3 | The field line name
With this attribute you can group fields in a single line together. |
| width string hinzugefügt in Version 4.0.3 | The field width
With this attribute you can set the width of a field. Auswahlmöglichkeiten:
BeispieleName 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 BeispieleShow only wanted columns |
Beispiele
Gemeinsames Adress-Unterformular
Ein Unterformular Address, das von zwei list-Feldern desselben Formulars wiederverwendet wird:
- 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
Nachverfolgung mit Markern (idempotent)
Vorab geladene Zeilen sind geschützt, und die Marker teilen dem Playbook mit, welche Zeilen neu, geändert oder entfernt sind:
- 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
Zeilen vorab füllen
Eine Liste kann aus drei Quellen vorab gefüllt werden. In jedem Fall müssen die entstehenden Zeilen Objekte sein, deren Schlüssel zu den Feldnamen des referenzierten Unterformulars passen.
Statisches default
Zeilen, die im Formular selbst stehen:
- 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
Aus einer REST-API (expression)
Zeilen, die ein serverseitiger Ausdruck aus einer REST-API lädt:
- name: users
type: list
label: Users
subform: User
columns:
- username
- email
expression: fn.fnRestBasic('get','https://api.example.com/users','','my_api_cred','')
Aus einer Datenbankabfrage (dbConfig + query)
Zeilen, die aus einer Datenbankabfrage geladen werden:
- name: servers
type: list
label: Servers
subform: Server
columns:
- hostname
- role
dbConfig: CMDB_CONN
query: SELECT hostname, role FROM servers WHERE active = 1
dbConfig nennt eine Datenbank unter Verbindungen > Datenbanken (ab 7.5.0) oder sonst Anmeldedaten vom Typ Datenbank, wie bisher (siehe Datenbanken in Formularen).
Aus einem lokalen Ausdruck (runLocal)
Zeilen, die ein lokaler Ausdruck im Browser berechnet:
- 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' }
]
Verschachtelte Listen
Ein Unterformular kann ein eigenes list-Feld enthalten, für eine Liste innerhalb jeder Zeile:
- 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
Über __parent__ auf Daten des übergeordneten Formulars zugreifen
Wenn sich der Zeileneditor eines Unterformulars öffnet, fügt AnsibleForms eine Variable __parent__ in das Unterformular ein. Sie enthält eine Momentaufnahme aller Feldwerte des übergeordneten Formulars, einschließlich Konstanten und Vars.
Verweisen Sie darauf mit der üblichen Ausdruckssyntax $(...) in den Felddefinitionen des Unterformulars:
- 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__ist ein Hilfsmittel nur für das Frontend. Es wird aus den Ansible-Extravars entfernt und nie an das Playbook gesendet.