Erstellen adaptiver Formulare mithilfe des JSON-Schemas creating-adaptive-forms-using-json-schema

CAUTION
AEM 6.4 hat das Ende der erweiterten Unterstützung erreicht und diese Dokumentation wird nicht mehr aktualisiert. Weitere Informationen finden Sie in unserer technische Unterstützung. Unterstützte Versionen suchen here.

Voraussetzungen prerequisites

Das Authoring eines adaptiven Formulars mit einem JSON-Schema als Formularmodell erfordert grundlegende Kenntnisse des JSON-Schemas. Es wird empfohlen, den folgenden Inhalt vor diesem Artikel durchzulesen.

Verwenden eines JSON-Schemas als Formularmodell using-a-json-schema-as-form-model

AEM Forms unterstützt die Erstellung eines adaptiven Formulars mithilfe eines vorhandenen JSON-Schemas als Formularmodell. Dieses JSON-Schema stellt die Struktur dar, in der Daten vom Back-End-System in Ihrem Unternehmen produziert oder genutzt werden. Das JSON-Schema, das Sie verwenden, sollte mit den Spezifikationen der Version 4 konform sein.

Die wichtigsten Funktionen bei der Verwendung eines JSON-Schemas sind:

  • Die Struktur der JSON-Datei wird im Authoring-Modus für ein adaptives Formular auf der Registerkarte Inhaltssuche als Baumstruktur angezeigt. Sie können Elemente aus der JSON-Hierarchie in das adaptive Formular ziehen und hinzufügen.
  • Sie können das Formular mit JSON im Voraus ausfüllen, das mit dem zugehörigen Schema konform ist.
  • Bei der Übermittlung werden die vom Benutzer eingegebenen Daten als JSON gesendet, das dem zugehörigen Schema entspricht.

Ein JSON-Schema besteht aus einfachen und komplexen Elementtypen. Die Elemente weisen Attribute auf, die dem Element Regeln hinzufügen. Wenn diese Elemente und Attribute in ein adaptives Formular gezogen werden, werden sie automatisch der entsprechenden Komponente des adaptiven Formulars zugeordnet.

Diese Zuordnung von JSON-Elementen zu adaptiven Formularkomponenten lautet wie folgt:

JSON-Element, -Eigenschaften oder -Attribute
Komponente des adaptiven Formulars

Zeichenfolgen-Eigenschaften mit enum- und enumNames-Beschränkung.

Syntax,

{

"type" : "string",

"enum" : ["M", "F"]

"enumNames" : ["Male", "Female"]

}

Dropdown-Komponente:

  • Die in enumNames aufgeführten Werte werden in der Dropbox angezeigt.
  • Die in der Aufzählung aufgeführten Werte werden zur Berechnung verwendet.

Zeichenfolgeneigenschaft mit Formateinschränkung. Beispielsweise E-Mail und Datum.

Syntax,

{

"type" : "string",

"format" : "email"

}

  • Die E-Mail-Komponente wird zugeordnet, wenn der Typ Zeichenfolge und das Format E-Mail ist.
  • Textbox-Komponente mit Validierung wird zugeordnet, wenn der Typ Zeichenfolge ist und das Format der Hostname ist.

{

"type" : "string",

}

Textfeld
number-Eigenschaft
Numerisches Feld mit Untertyp auf Gleitkommazahl eingestellt
Ganzzahl-Eigenschaft
Numerisches Feld mit Untertyp "integer"
Boolesche Eigenschaft
Schalter
Objekteigenschaft
Bedienfeld
Array-Eigenschaft
Wiederholbares Bedienfeld mit Mindest- und Höchstwert gleich "minItems"bzw. "maxItems". Nur homogene Arrays werden unterstützt. Daher muss die Elementbeschränkung ein Objekt sein, kein Array.

Allgemeine Schema-Eigenschaften common-schema-properties

Das adaptive Formular verwendet die im JSON-Schema verfügbaren Informationen, um jedes generierte Feld zuzuordnen. Führen Sie insbesondere die folgenden Aufgaben aus:

  • Die Eigenschaft title dient als Beschriftung für die Komponenten des adaptiven Formulars.
  • Die Eigenschaft "description"wird als lange Beschreibung für eine Komponente eines adaptiven Formulars festgelegt.
  • Die Standardeigenschaft dient als Anfangswert eines adaptiven Formularfelds.
  • Die Eigenschaft maxLength wird als Attribut maxLength der Textfeldkomponente festgelegt.
  • Die Eigenschaften "minimum", "maximum", "exclusiveMinimum"und "exclusiveMaximum"werden für die Komponente "Numeric box"verwendet.
  • Um den Bereich für die DatePicker-Komponente zu unterstützen, werden zusätzliche JSON-Schema-Eigenschaften minDate und maxDate bereitgestellt.
  • Mit den Eigenschaften minItems und maxItems wird die Anzahl der Elemente/Felder beschränkt, die zu einer Bedienfeldkomponente hinzugefügt oder daraus entfernt werden können.
  • Die Eigenschaft readOnly legt das schreibgeschützte Attribut einer adaptiven Formularkomponente fest.
  • Die erforderliche Eigenschaft markiert das Feld im adaptiven Formular als obligatorisch, während im Falle eines Bedienfelds (wobei der Typ "Objekt"ist) die endgültigen gesendeten JSON-Daten Felder mit leerem Wert aufweisen, die diesem Objekt entsprechen.
  • Die pattern-Eigenschaft wird als Überprüfungsmuster (regulärer Ausdruck) im adaptiven Formular festgelegt.
  • Die Erweiterung der JSON-Schema-Datei „.schema.json“ muss beibehalten werden. Beispiel: <filename>.schema.json.

Beispiel für ein JSON-Schema sample-json-schema

Hier ist ein Beispiel für ein JSON-Schema.

{
 "$schema": "https://json-schema.org/draft-04/schema#",
 "definitions": {
  "employee": {
   "type": "object",
   "properties": {
    "userName": {
     "type": "string"
    },
    "dateOfBirth": {
     "type": "string",
     "format": "date"
    },
    "email": {
     "type": "string",
     "format": "email"
    },
    "language": {
     "type": "string"
    },
    "personalDetails": {
     "$ref": "#/definitions/personalDetails"
    },
    "projectDetails": {
     "$ref": "#/definitions/projectDetails"
    }
   },
   "required": [
    "userName",
    "dateOfBirth",
    "language"
   ]
  },
  "personalDetails": {
   "type": "object",
   "properties": {
    "GeneralDetails": {
     "$ref": "#/definitions/GeneralDetails"
    },
    "Family": {
     "$ref": "#/definitions/Family"
    },
    "Income": {
     "$ref": "#/definitions/Income"
    }
   }
  },
  "projectDetails": {
   "type": "array",
   "items": {
    "properties": {
     "name": {
      "type": "string"
     },
     "age": {
      "type": "number"
     },
     "projects": {
      "$ref": "#/definitions/projects"
     }
    }
   },
   "minItems": 1,
   "maxItems": 4
  },
  "projects": {
   "type": "array",
   "items": {
    "properties": {
     "name": {
      "type": "string"
     },
     "age": {
      "type": "number"
     },
     "projectsAdditional": {
      "$ref": "#/definitions/projectsAdditional"
     }
    }
   },
   "minItems": 1,
   "maxItems": 4
  },
  "projectsAdditional": {
   "type": "array",
   "items": {
    "properties": {
     "Additional_name": {
      "type": "string"
     },
     "Additional_areacode": {
      "type": "number"
     }
    }
   },
   "minItems": 1,
   "maxItems": 4
  },
  "GeneralDetails": {
   "type": "object",
   "properties": {
    "age": {
     "type": "number"
    },
    "married": {
     "type": "boolean"
    },
    "phone": {
     "type": "number",
     "aem:afProperties": {
      "sling:resourceType": "/libs/fd/af/components/guidetelephone",
      "guideNodeClass": "guideTelephone"
     }
    },
    "address": {
     "type": "string"
    }
   }
  },
  "Family": {
   "type": "object",
   "properties": {
    "spouse": {
     "$ref": "#/definitions/spouse"
    },
    "kids": {
     "$ref": "#/definitions/kids"
    }
   }
  },
  "Income": {
   "type": "object",
   "properties": {
    "monthly": {
     "type": "number"
    },
    "yearly": {
     "type": "number"
    }
   }
  },
  "spouse": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string"
    },
    "Income": {
     "$ref": "#/definitions/Income"
    }
   }
  },
  "kids": {
   "type": "array",
   "items": {
    "properties": {
     "name": {
      "type": "string"
     },
     "age": {
      "type": "number"
     }
    }
   },
   "minItems": 1,
   "maxItems": 4
  }
 },
 "type": "object",
 "properties": {
  "employee": {
   "$ref": "#/definitions/employee"
  }
 }
}

Wiederverwendbare Schemadefinitionen reusable-schema-definitions

Definitionsschlüssel kennzeichnen wiederverwendbare Schemas. Die wiederverwendbaren Schemadefinitionen werden verwendet, um Fragmente zu erstellen. Sie ähnelt der Identifizierung komplexer Typen in XSD. Ein JSON-Beispielschema mit Definitionen wird unten angezeigt:

{
  "$schema": "https://json-schema.org/draft-04/schema#",

  "definitions": {
    "address": {
      "type": "object",
      "properties": {
        "street_address": { "type": "string" },
        "city":           { "type": "string" },
        "state":          { "type": "string" }
      },
      "required": ["street_address", "city", "state"]
    }
  },

  "type": "object",

  "properties": {
    "billing_address": { "$ref": "#/definitions/address" },
    "shipping_address": { "$ref": "#/definitions/address" }
  }
}

Im obigen Beispiel wird ein Kundendatensatz definiert, in dem jeder Kunde über eine Versand- und eine Rechnungsadresse verfügt. Die Struktur beider Adressen ist identisch - Adressen haben eine Straße, eine Stadt und einen Bundesstaat - daher ist es empfehlenswert, die Adressen nicht zu duplizieren. Außerdem wird das Hinzufügen und Löschen von Feldern für künftige Änderungen vereinfacht.

Vorkonfigurieren von Feldern in JSON-Schemadefinitionen pre-configuring-fields-in-json-schema-definition

Mit der Eigenschaft aem:afProperties können Sie ein JSON-Schemafeld so vorkonfigurieren, dass es einer benutzerdefinierten Komponente des adaptiven Formulars zugeordnet wird. Ein Beispiel wird unten angezeigt:

{
    "properties": {
        "sizeInMB": {
            "type": "integer",
            "minimum": 16,
            "maximum": 512,
            "aem:afProperties" : {
                 "sling:resourceType" : "/apps/fd/af/components/guideTextBox",
                 "guideNodeClass" : "guideTextBox"
             }
        }
    },
    "required": [ "sizeInMB" ],
    "additionalProperties": false
}

Einschränken der gültigen Werte für eine Komponente eines adaptiven Formulars limit-acceptable-values-for-an-adaptive-form-component

Sie können die folgenden Einschränkungen zu JSON-Schemaelementen hinzufügen, um die Werte zu beschränken, die für eine Komponente eines adaptiven Formulars gültig sind:

Schemaeigenschaft
Datentyp
Beschreibung
Komponente
maximum
Zeichenfolge
Gibt die Obergrenze für numerische Werte und Daten an. Standardmäßig ist der Maximalwert enthalten.
  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
minimum
Zeichenfolge
Gibt die Untergrenze für numerische Werte und Daten an. Standardmäßig ist der Mindestwert enthalten.
  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
exclusiveMaximum
Boolesch

Wenn "true", muss der numerische Wert oder das Datum, der bzw. das in der Komponente des Formulars angegeben wird, kleiner als der numerische Wert oder das Datum sein, der bzw. das für die Eigenschaft "maximum"angegeben ist.

Bei "false"muss der numerische Wert oder das Datum, der bzw. das in der Komponente des Formulars angegeben wird, kleiner oder gleich dem numerischen Wert oder Datum sein, der bzw. das für die Eigenschaft "maximum"angegeben ist.

  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
exclusiveMinimum
Boolesch

Wenn "true", muss der in der Komponente des Formulars angegebene numerische Wert oder das Datum größer sein als der numerische Wert oder das Datum, der bzw. das für die Eigenschaft "minimum"angegeben wurde.

Bei "false"muss der in der Komponente des Formulars angegebene numerische Wert oder das Datum größer oder gleich dem numerischen Wert oder Datum sein, der bzw. das für die Eigenschaft "minimum"angegeben wurde.

  • Numerisches Feld
  • Numerische Schritte
  • Datumsauswahl
minLength
Zeichenfolge
Gibt die Mindestanzahl von Zeichen an, die in einer Komponente zulässig sind. Die minimale Länge muss größer oder gleich null sein.
  • Textfeld
maxLength
Zeichenfolge
Gibt die maximal zulässige Anzahl von Zeichen in einer Komponente an. Die maximale Länge muss größer oder gleich null sein.
  • Textfeld
pattern
Zeichenfolge

Gibt die Reihenfolge der Zeichen an. Eine Komponente akzeptiert die Zeichen, wenn die Zeichen dem angegebenen Muster entsprechen.

Die pattern-Eigenschaft wird dem Überprüfungsmuster der entsprechenden adaptiven Formularkomponente zugeordnet.

  • Alle adaptiven Formulare, die einem XSD-Schema zugeordnet sind
maxItems
Zeichenfolge
Gibt die maximale Anzahl von Elementen in einem Array an. Die maximale Anzahl von Elementen muss größer oder gleich null sein.
minItems
Zeichenfolge
Gibt die Mindestanzahl von Elementen in einem Array an. Die Mindestanzahl von Elementen muss größer oder gleich null sein.

Nicht unterstützte Konstrukte non-supported-constructs

Adaptive Formulare unterstützen die folgenden JSON-Schema-Konstrukte nicht:

  • Null-Typ
  • Unionstypen, z. B. und
  • OneOf, AnyOf, AllOf und NOT
  • Nur homogene Arrays werden unterstützt. Die Elementbegrenzung muss also ein Objekt und kein Array sein.

Häufig gestellte Fragen frequently-asked-questions

Warum kann ich nicht einzelne Elemente eines Teilformulars (Struktur aus einem komplexen Typ generiert) für wiederholbare Teilformulare ziehen (Wert von „minOccurs“ oder „maxOccurs“ ist größer als 1)?

In einem wiederholbaren Teilformular müssen Sie das vollständige Teilformular verwenden. Wenn Sie nur einzelne Felder nutzen möchten, verwenden Sie die gesamte Struktur und löschen Sie unerwünschte Felder.

Ich habe eine lange komplexe Struktur in der Inhaltssuche. Wie finde ich ein bestimmtes Element?

Sie haben zwei Optionen:

  • Scrollen Sie durch die Baumstruktur
  • Verwenden Sie das Suchfeld, um ein Element zu finden
recommendation-more-help
a6ebf046-2b8b-4543-bd46-42a0d77792da