Mehrere Werte in einem Feld¶
Manche Angaben haben von Natur aus mehr als einen Wert: die Länder, in die ein Antrag reicht; die Stichworte zu einem Vorgang; die Artikel einer Bestellung, wenn es dafür keine eigene Tabelle braucht.
Dafür gibt es vier Eingabearten. Allen gemeinsam: das Feld ist vom Typ array,
und alle gewählten Werte landen zusammen in einer einzigen Spalte.
Wann lieber eine Detail-Tabelle?
Sobald zu jedem Eintrag weitere Angaben gehören — Menge, Preis, Datum —
ist eine Detail-Tabelle (kc:childTable)
das richtige Mittel. Die Mehrfachauswahl hier ist für reine Wertelisten:
eine Handvoll Schlüssel, sonst nichts.
Die vier Eingabearten¶
kc:widget |
Aussehen | Wofür |
|---|---|---|
checkbox |
Ankreuzfelder untereinander | wenige, immer sichtbare Optionen |
multiselect |
Aufklapp-Liste mit Filter, Auswahl als Chips | lange Listen — Länder, Kostenstellen, Abteilungen |
tags |
freie Eingabe, Enter oder Komma trennt | Stichworte, Empfängerlisten — alles ohne feste Liste |
(kein Widget, dafür kc:picker) |
Auswahl-Dialog mit Ankreuzfeldern | Werte aus einer Datenbank-Tabelle, mit Suche und Seiten |
Ankreuzfelder¶
{
"hobbys": {
"type": "array",
"title": "Hobbys",
"items": { "type": "string" },
"kc:widget": "checkbox",
"kc:radioColumns": 2,
"kc:lookupOptions": [
{ "key": "lesen", "value": "Lesen" },
{ "key": "musik", "value": "Musik" },
{ "key": "sport", "value": "Sport" }
]
}
}
kc:radioColumns steuert die Spaltigkeit (1, 2 oder 3). Auf schmalen
Bildschirmen fällt die Anzeige automatisch auf eine Spalte zurück.
Mehrfach-Dropdown¶
Dieselbe Struktur, nur mit "kc:widget": "multiselect" — gedacht für Listen,
bei denen Ankreuzfelder die Seite sprengen würden. Die Optionen erscheinen in
einem Aufklapp-Feld mit Suchfilter, das Gewählte steht als Chips darüber.
Die Liste darf auch aus einer Datenquelle kommen: kc:lookup funktioniert
hier genauso wie bei der Einfachauswahl — Datenbank, externe Datenquelle, SQL,
Skript oder LDAP. Siehe Lookups.
Freie Tag-Liste¶
{
"stichworte": {
"type": "array",
"title": "Stichworte",
"items": { "type": "string" },
"kc:widget": "tags"
}
}
Der Anwender tippt einen Wert und drückt Enter oder Komma; ein Einfügen von
a, b, c wird automatisch aufgeteilt. "kc:itemFormat": "email" markiert
auffällige Chips dezent rot — praktisch für Empfängerlisten.
Die Reihenfolge lässt sich mit der Maus ändern: einen Eintrag anfassen, festhalten und an seinen neuen Platz schieben. Auf dem Tablet oder Telefon genauso mit dem Finger. Ein blosses Antippen verschiebt nichts — erst eine Bewegung von ein paar Pixeln gilt als Ziehen, damit das × zum Entfernen erreichbar bleibt.
In der Vorschau des Editors geht das nicht
Dort ist das ganze Feld verschiebbar, damit du die Felder des Formulars sortieren kannst — dieser Zug hat Vorrang. Die Reihenfolge der Werte änderst du im ausgefüllten Formular.
Mehrfach-Picker¶
Der Picker füllt normalerweise aus einer gewählten Zeile
mehrere Felder. Ist das Feld ein array, dreht sich das um: mehrere Zeilen
füllen ein Feld.
{
"artikel": {
"type": "array",
"title": "Artikel",
"items": { "type": "string" },
"kc:picker": {
"title": "Artikel wählen",
"table": "bueromaterial",
"search": ["artikelnr", "bezeichnung"],
"columns": [
{ "column": "artikelnr", "title": "Artikel-Nr." },
{ "column": "bezeichnung", "title": "Bezeichnung" }
],
"set": { "artikel": "artikelnr" }
}
}
}
Entscheidend ist die Zeile "set": { "artikel": "artikelnr" }: sie sagt, aus
welcher Spalte der zu speichernde Wert kommt — hier die Artikelnummer. Der
Schlüssel ist der eigene Feldname.
Ohne set-Eintrag bleibt es beim Einfach-Picker
Fehlt die Zuordnung, weiß der Dialog nicht, was er speichern soll. Er verhält sich dann wie bisher und wählt genau eine Zeile. Das ist Absicht — lieber das gewohnte Verhalten als eine Auswahl ins Leere.
Im Dialog bekommt jede Zeile ein Ankreuzfeld, der Klick schaltet um statt zu schließen, und unten stehen die Anzahl und Übernehmen. Die Auswahl bleibt beim Blättern erhalten. Am Feld stehen die Werte als Chips; entfernt wird am Chip, ergänzt über den …-Knopf.
Wie es gespeichert wird¶
Alle gewählten Werte stehen als JSON-Array in einer Textspalte:
Das ist verlustfrei — auch ein Wert, der selbst ein Komma enthält („Berlin,
Mitte"), übersteht den Weg unbeschadet. Und db-Skripte können die Spalte mit
den JSON-Funktionen ihrer Datenbank abfragen.
Im Skript ist der Wert ein Array:
Wie breit wird die Spalte?¶
Sind die Optionen im Schema bekannt, rechnet KCForms auf den schlimmsten Fall —
alle Optionen gewählt. Sonst bleiben 500 Zeichen Vorrat; ab 4000 wird daraus
eine TEXT-Spalte. Mit kc:maxLength legst du die Breite selbst fest.
Bestandsformulare werden beim Start nachgezogen
Ältere Formulare hatten für diese Felder eine VARCHAR(255)-Spalte. Beim
Hochfahren verbreitert KCForms sie auf das nötige Maß. Verkleinert wird
nie — eine von Hand vergrößerte Spalte bleibt, wie sie ist.
In Druck, Listen und Export¶
Dort erscheinen die Werte kommagetrennt und in Klartext, aufgelöst über die Auswahlliste:
Deutschland, Frankreich, Schweden
Welche Form genau — Schlüssel, Klartext oder Schlüssel — Klartext — steuert
kc:lookupDisplay wie bei der Einfachauswahl (Lookups). Werte,
die nicht in der Liste stehen (etwa aus einer freien Tag-Liste), erscheinen so,
wie sie gespeichert sind.
Weiter¶
- Lookups — woher die Auswahllisten kommen.
- Picker — der Auswahl-Dialog im Einzelnen.
- Detail-Tabellen — wenn zu jedem Eintrag mehr als ein Wert gehört.