tibi-docs/docs/projektkonfig/collections/fields.md

5.2 KiB

fields

Felder im tibi-server müssen einen bestimmten Datentyp haben. Über den tibi-admin können die Felder über Widgets in unterschiedlichen Ausprägungen dargestellt werden (view-Widgets), bzw. dem Benutzer eine Eingabe abverlangen (input-Widgets).

Es gibt grundlegende Angaben, die jedes Feld haben muss um vom tibi-server akzeptiert zu werden. Darüber hinaus kann auch jedes Feld ein meta Objekt haben, was dem tibi-admin mitteilt, wie er dieses Feld für Ausgabe und Eingabe behandel soll.

Zunächst folgt der grundlegende Aufbau des Feld-Objektes:

!!!include(api/collections/fields/date.yml)!!!

validator Objekt

Wie im Beispiel von fields/date.yml unter validator zu sehen ist, wird dort ein Datum nach dem aktuellen erwartet. Wie der Validator sich auf die UI auswirkt, ist im obigen Video zu sehen.

Das validator Objekt wird tibi-server seitig genutzt um die Daten zu validieren. Da das validator Objekt dem tibi-admin ebenso zur Verfügung steht, kann vorab eine client-seitige Validierung zusätzlich durchgeführt werden.

Attribute des Objektes:

Attribut Datentyp Beschreibung
required boolean wenn true, dann ist zwingend eine Eingabe zu diesem Feld nötig
allowZero boolean in Kombination mit required: true, wenn true, dann ist der jeweilige "Null"-Wert des Datentyps erlaubt

z.B. type: string erlaubt den leeren String und type: number erlaubt 0
eval string Javascript-Code der zu true evaluieren muss um den Wert des Feldes als gültig zu definieren

eval-Attribut

Der Javascript-Code in diesem Attribut kann folgende Rückgabe-Werte haben:

Wert Bedeutung
true Der Wert des Feldes ist gültig
false Der Wert des Feldes ist ungültig
"Text" Wird ein String zurückgegeben ist, wird der Wert es Feldes ebenso als ungültig erachtet und der String selbst ist eine benutzerdefinierte Fehlermeldung, die in der Serverantwort gelesen werden kann.

Da der eval Code serverseitig immer ausgeführt wird und ein Fehlschlag zwangsläufig zum Abbruch der Serveraktion führt, ist es wichtig, dass der serverseitige Javascript-Kontext berücksichtigt wird.

Optional kann der Code auch zusätzlich über eine Lauffähigkeit ohne Fehler (z.B. keine Verwendung nicht vorhandender Kontext-Variablen oder Verwendung von try ... catch) im tibi-admin verfügen. Das hat den Vorteil, dass eine Vorab-Validierung stattfindet, bevor der Datensatz an der Server gesendet wird.

Sollte der eval Code im tibi-admin nicht lauffähig sein (nicht abgefangene Exception), wird der Validator clientseitig ingoriert und nur die serverseitige Prüfung beeinflusst die Aktion.

siehe

dependsOn

Obige Darstellung wie im Video wird beispielsweise durch folgende Feld-Konfiguration erreicht:

# in einer Kollektions-Konfiguration
fields:
  - name: type
    type: string
    meta:
        label:
            de: Typ
            en: Type
        widget: select
        choices:
            - name: 
                de: Standardseite
                en: Standard page
            id: page
            - name: 
                de: News
                en: News
            id: news

  - name: title
    type: string
    meta:
        label:
            de: Titel
            en: Title

  - name: date
    type: date
    meta:
        label:
            de: Titel
            en: title
        widget: date
        defaultValue:
            eval: new Date()
        dependsOn:
            eval: $parent?.type == "news"

meta.dependsOn kann als Objekt mit eval-Attribut für Javascript oder als string mit dem Feldnamen (Punktschreibweise, z.B. "additionalData.author") angegeben werden.

Wird der Feldname verwendet wird nur geprüft, ob das Feld belegt ist. TODO

Die eval Variante verwendet als Javascript-Kontext Variablen die auf folgenden Seite beschrieben werden:

Die Rückgabe des Javascript-Codes beeinflusst die Einblendung des betroffenen Feldes in folgender Weise:

Rückgabe Bedeutung
true Das Feld wird angezeigt
false Das Feld wird ausgeblendet

defaultValue

Für die Vorlegung neu anzulegender Datensätze kann in field.meta.defaultValue direkt der Standardwert hinterlegt werden, oder über field.meta.defaultValue.eval ein Javascript-Code angegeben werden, der den Wert ermittelt. Die Rückgabe des Javascript-Codes, sowie auch die direkte Vergabe des Wertes muss dem Datentyp des Feldes entsprechen.

Der Javascript-Kontext ist der gleiche wie bei field.meta.dependsOn.eval.