Aangepaste formulieren maken met JSON-schema creating-adaptive-forms-using-json-schema

Adobe beveelt aan moderne en uitbreidbare gegevensvastlegging te gebruiken Kernonderdelenfor nieuwe Adaptieve Forms makenof Aangepaste Forms toevoegen aan AEM Sites-pagina's. Deze componenten betekenen een aanzienlijke vooruitgang in de aanmaak van Adaptive Forms en zorgen voor indrukwekkende gebruikerservaring. In dit artikel wordt een oudere aanpak beschreven voor de auteur Adaptive Forms die gebruikmaakt van stichtingscomponenten.

Versie
Artikelkoppeling
AEM as a Cloud Service
Klik hier
AEM 6,5
Dit artikel

Vereisten prerequisites

Voor het ontwerpen van een adaptief formulier met behulp van een JSON-schema als formuliermodel is basiskennis van JSON-schema vereist. Het wordt aanbevolen de volgende inhoud vóór dit artikel te lezen.

Een JSON-schema gebruiken als formuliermodel using-a-json-schema-as-form-model

Adobe Experience Manager Forms ondersteunt het maken van een adaptief formulier met behulp van een bestaand JSON-schema als formuliermodel. Dit JSON-schema vertegenwoordigt de structuur waarin gegevens worden geproduceerd of verbruikt door het back-end systeem in uw organisatie. Het JSON-schema dat u gebruikt, moet compatibel zijn met v4-specificaties.

De belangrijkste eigenschappen van het gebruiken van een Schema JSON zijn:

  • De structuur van JSON wordt als een structuur weergegeven op het tabblad Inhoudszoeker in de ontwerpmodus voor een adaptief formulier. U kunt elementen slepen van de JSON-hiërarchie naar het aangepaste formulier.
  • U kunt het formulier vooraf invullen met JSON dat voldoet aan het bijbehorende schema.
  • Bij verzending worden de gegevens die door de gebruiker zijn ingevoerd, verzonden als JSON die wordt uitgelijnd met het bijbehorende schema.

Een JSON-schema bestaat uit eenvoudige en complexe elementtypen. De elementen hebben attributen die regels aan het element toevoegen. Wanneer deze elementen en kenmerken naar een adaptief formulier worden gesleept, worden ze automatisch toegewezen aan de bijbehorende adaptieve formuliercomponent.

Deze toewijzing van JSON-elementen met adaptieve formuliercomponenten is als volgt:

"birthDate": {
              "type": "string",
              "format": "date",
              "pattern": "date{DD MMMM, YYYY}",
              "aem:affKeyword": [
                "DOB",
                "Date of Birth"
              ],
              "description": "Date of birth in DD MMMM, YYYY",
              "aem:afProperties": {
                "displayPictureClause": "date{DD MMMM, YYYY}",
                "displayPatternType": "date{DD MMMM, YYYY}",
                "validationPatternType": "date{DD MMMM, YYYY}",
                "validatePictureClause": "date{DD MMMM, YYYY}",
                "validatePictureClauseMessage": "Date must be in DD MMMM, YYYY format."
              }
JSON-element, -eigenschappen of -kenmerken
Aangepast formulieronderdeel

Tekenreekseigenschappen met de beperking enum en enumNames

Syntaxis,

{

"type" : "string",

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

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

}

Onderdeel vervolgkeuzelijst:

  • Waarden die worden vermeld in enumNames, worden weergegeven in het vak drop.
  • Waarden die in de opsomming staan, worden gebruikt voor de berekening.

Tekenreekseigenschap met indelingsbeperking. Bijvoorbeeld e-mail en datum.

Syntaxis,

{

"type" : "string",

"format" : "email"

}

  • E-mailcomponent wordt toegewezen wanneer het type tekenreeks en indeling e-mail is.
  • TextBox-component met validatie wordt toegewezen wanneer het type tekenreeks en notatie hostnaam is.

{

"type" : "string",

}

Tekstveld
number, eigenschap
Numeriek veld met subtype ingesteld op zwevend
integer, eigenschap
Numeriek veld met subtype ingesteld op geheel getal
boolean, eigenschap
Overschakelen
objecteigenschap
Deelvenster
array, eigenschap
Herhaalbaar deelvenster met min en max. gelijk aan minItems respectievelijk maxItems. Alleen homogene arrays worden ondersteund. De itembeperking moet dus een object zijn en geen array.

Algemene schemaeigenschappen common-schema-properties

Het adaptieve formulier gebruikt informatie die beschikbaar is in het JSON-schema om elk gegenereerd veld in kaart te brengen. Met name:

  • De title Deze eigenschap fungeert als label voor de adaptieve formuliercomponenten.
  • De description eigenschap wordt ingesteld als lange beschrijving voor een adaptieve formuliercomponent.
  • De default Deze eigenschap fungeert als de beginwaarde van een adaptief formulierveld.
  • De maxLength eigenschap is ingesteld als maxlength kenmerk van de tekstveldcomponent.
  • De minimum, maximum, exclusiveMinimum, en exclusiveMaximum worden gebruikt voor de component Numeriek vak.
  • Om waaier voor te steunen DatePicker component aanvullende JSON-schemaeigenschappen minDate en maxDate worden opgegeven.
  • De minItems en maxItems worden gebruikt om het aantal items/velden te beperken dat kan worden toegevoegd aan of verwijderd uit een deelvenstercomponent.
  • De readOnly eigenschap stelt de readonly kenmerk van een adaptieve formuliercomponent.
  • De required geeft de eigenschap aan dat het adaptieve formulierveld verplicht is, terwijl in het paneel (waar type object is) de uiteindelijke JSON-gegevens velden hebben met een lege waarde die overeenkomt met dat object.
  • De pattern eigenschap wordt ingesteld als het validatiepatroon (reguliere expressie) in adaptieve vorm.
  • De extensie van het JSON-schemabestand moet .schema.json blijven. Bijvoorbeeld: <filename>.schema.json.

Voorbeeld JSON-schema sample-json-schema

Hier is een voorbeeld van een 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"
  }
 }
}

Herbruikbare schemadefinities reusable-schema-definitions

De sleutels van de definitie worden gebruikt om herbruikbare schema's te identificeren. De herbruikbare schemadefinities worden gebruikt om fragmenten tot stand te brengen. Het is gelijkaardig aan het identificeren van complexe types in XSD. Hieronder volgt een voorbeeld van een JSON-schema met definities:

{
  "$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" }
  }
}

In het bovenstaande voorbeeld wordt een klantrecord gedefinieerd, waarbij elke klant zowel een verzendadres als een factuuradres heeft. De structuur van beide adressen is zelfde-adressen heeft een straatadres, een stad en een staat— zodat is het een goed idee om de adressen niet te dupliceren. Het maakt het toevoegen en schrappen van gebieden voor om het even welke toekomstige veranderingen gemakkelijk.

Velden vooraf configureren in JSON-schemadefinitie pre-configuring-fields-in-json-schema-definition

U kunt de aem:afProperties eigenschap om het JSON-schemaveld vooraf te configureren voor toewijzing aan een aangepaste formuliercomponent. Hieronder ziet u een voorbeeld:

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

Scripts of expressies configureren voor formulierobjecten configure-scripts-or-expressions-for-form-objects

JavaScript is de expressietaal van adaptieve formulieren. Alle expressies zijn geldige JavaScript-expressies en gebruiken API's van het scriptmodel voor aangepaste formulieren. U kunt formulierobjecten vooraf configureren op Een expressie evalueren op een formuliergebeurtenis.

Met de eigenschap aaem:afproperties kunt u aangepaste formulierexpressies of scripts vooraf configureren voor adaptieve formuliercomponenten. Wanneer bijvoorbeeld de gebeurtenis initialize wordt geactiveerd, stelt de onderstaande code de waarde van het telefoonveld in en drukt een waarde af op het logbestand:

"telephone": {
  "type": "string",
  "pattern": "/\\d{10}/",
  "aem:affKeyword": ["phone", "telephone","mobile phone", "work phone", "home phone", "telephone number", "telephone no", "phone number"],
  "description": "Telephone Number",
  "aem:afProperties" : {
    "sling:resourceType" : "fd/af/components/guidetelephone",
    "guideNodeClass" : "guideTelephone",
    "events": {
      "Initialize" : "this.value = \"1234567890\"; console.log(\"ef:gh\") "
    }
  }
}

U moet lid zijn van de form-power-user-group om scripts of expressies voor formulierobjecten te configureren. In de onderstaande tabel staan alle scriptgebeurtenissen die worden ondersteund voor een adaptieve formuliercomponent.

Component \ Event
initialiseren
Berekenen
Zichtbaarheid
Valideren
Ingeschakeld
Waarde vastleggen
Klikken
Opties
Tekstveld
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Numeriek veld
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Numerieke stap
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Keuzerondje
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Telefoon
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Overschakelen
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Knop
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Selectievakje
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Vervolgkeuzelijst
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Afbeeldingskeuze
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Datuminvoerveld
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Datumkiezer
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
E-mail
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Bestandsbijlage
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Pictogram Ja
Afbeelding
Pictogram Ja
Pictogram Ja
Tekenen
Pictogram Ja
Pictogram Ja
Deelvenster
Pictogram Ja
Pictogram Ja

Sommige voorbeelden van het gebruik van gebeurtenissen in een JSON verbergen een gebied bij initialize gebeurtenis en vormen waarde van een ander gebied bij waarde begaan gebeurtenis. Voor gedetailleerde informatie over het maken van expressies voor de scriptgebeurtenissen raadpleegt u Adaptieve formulierexpressies.

Hier volgt een voorbeeld van de JSON-code voor eerder vermelde voorbeelden.

Veld verbergen bij initialisatiegebeurtenis hiding-a-field-on-initialize-event

"name": {
    "type": "string",
    "aem:afProperties": {
        "events" : {
            "Initialize" : "this.visible = false;"
        }
    }
}

Waarde van een ander veld configureren bij gebeurtenis value commit configure-value-of-another-field-on-value-commit-event

"Income": {
    "type": "object",
    "properties": {
        "monthly": {
            "type": "number",
            "aem:afProperties": {
                "events" : {
                    "Value Commit" : "IncomeYearly.value = this.value * 12;"
                }
            }
        },
        "yearly": {
            "type": "number",
            "aem:afProperties": {
                "name": "IncomeYearly"
            }
        }
    }
}

Acceptabele waarden voor een adaptieve formuliercomponent beperken limit-acceptable-values-for-an-adaptive-form-component

U kunt de volgende beperkingen toevoegen aan JSON-schemaelementen om de waarden te beperken die acceptabel zijn voor een adaptieve formuliercomponent:

Schema, eigenschap
Gegevenstype
Beschrijving
Component
maximum
String
Hiermee geeft u de bovengrens voor numerieke waarden en datums op. Standaard wordt de maximumwaarde opgenomen.
  • Numeriek vak
  • Numerieke stap
  • Datumkiezer
minimum
String
Hiermee geeft u de ondergrens voor numerieke waarden en datums op. Standaard wordt de minimumwaarde opgenomen.
  • Numeriek vak
  • Numerieke stap
  • Datumkiezer
exclusiveMaximum
Boolean

Indien waar (true), moet de numerieke waarde of datum die in de component van het formulier is opgegeven, kleiner zijn dan de numerieke waarde of datum die voor de eigenschap maximum is opgegeven.

Indien onwaar, moet de numerieke waarde of datum die in de component van de vorm wordt gespecificeerd minder dan of gelijk aan de numerieke waarde of de datum zijn die voor het maximumbezit wordt gespecificeerd.

  • Numeriek vak
  • Numerieke stap
  • Datumkiezer
exclusiveMinimum
Boolean

Indien waar (true), moet de numerieke waarde of datum die in de component van het formulier is opgegeven, groter zijn dan de numerieke waarde of datum die voor de eigenschap minimum is opgegeven.

Indien onwaar, moet de numerieke waarde of datum die in de component van de vorm wordt gespecificeerd groter zijn dan of gelijk aan de numerieke waarde of de datum die voor het minimumbezit wordt gespecificeerd.

  • Numeriek vak
  • Numerieke stap
  • Datumkiezer
minLength
String
Hiermee wordt het minimale aantal tekens opgegeven dat in een component is toegestaan. De minimumlengte moet gelijk zijn aan of groter zijn dan nul.
  • Tekstvak
maxLength
String
Hiermee wordt het maximale aantal tekens opgegeven dat in een component is toegestaan. De maximumlengte moet gelijk zijn aan of groter zijn dan nul.
  • Tekstvak
pattern
String

Hiermee geeft u de volgorde van de tekens op. Een component accepteert de tekens als de tekens overeenkomen met het opgegeven patroon.

De eigenschap pattern verwijst naar het validatiepatroon van de overeenkomstige adaptieve formuliercomponent.

  • Alle componenten voor adaptieve formulieren die zijn toegewezen aan een XSD-schema
maxItems
String
Geeft het maximale aantal items in een array op. De maximale items moeten gelijk zijn aan of groter zijn dan nul.
minItems
String
Geeft het minimale aantal items in een array op. De minimale items moeten gelijk zijn aan of groter zijn dan nul.

Schema-compatibele gegevens inschakelen enablig-schema-compliant-data

Voer de volgende stappen uit om alle op JSON-schema's gebaseerde Adaptieve Forms in staat te stellen schema-compatibele gegevens te genereren bij het verzenden van formulieren:

  1. Ga naar Experience Manager webconsole op https://server:host/system/console/configMgr.
  2. Zoeken Adaptive Form and Interactice Communication Web Channel Configuration.
  3. Selecteer deze optie om de configuratie te openen in de bewerkingsmodus.
  4. Selecteer de Generate Schema Compliant Data selectievakje.
  5. Sla de instellingen op.

adaptieve vorm en interactieve communicatie webkanaalconfiguratie

Niet-ondersteunde constructies non-supported-constructs

De volgende JSON-schemaconstructies worden niet ondersteund door adaptieve formulieren:

  • Null-tekst
  • Unietypen zoals alle, en
  • OneOf, anyOf, allOf, and not
  • Alleen homogene arrays worden ondersteund. De itembeperking moet dus een object zijn en geen array.

Veelgestelde vragen frequently-asked-questions

Waarom kan ik geen afzonderlijke elementen van een subformulier (structuur gegenereerd van een complex type) slepen voor herhaalbare subformulieren (waarden voor minOccurs of maxOccurs zijn groter dan 1)?

In een herhaalbaar subformulier moet u het volledige subformulier gebruiken. Als u alleen selectieve velden wilt, gebruikt u de volledige structuur en verwijdert u de ongewenste velden.

Ik heb een lange complexe structuur in de Inhoudszoeker. Hoe kan ik een specifiek element vinden?

U hebt twee opties:

  • Door de boomstructuur schuiven
  • Gebruik het vak Zoeken om een element te zoeken

Wat moet de extensie van het JSON-schemabestand zijn?

De extensie van het JSON-schemabestand moet .schema.json zijn. Bijvoorbeeld: <filename>.schema.json.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2