A criação de um formulário adaptável usando um esquema JSON como modelo de formulário requer compreensão básica do esquema JSON. É recomendável ler o seguinte conteúdo antes deste artigo.
O Adobe Experience Manager Forms suporta a criação de um Formulário adaptável usando um Esquema JSON existente como o modelo de formulário. Esse Esquema JSON representa a estrutura na qual os dados são produzidos ou consumidos pelo sistema de back-end na organização. O Esquema JSON que você usa deve ser compatível com especificações v4.
Os principais recursos do uso de um Esquema JSON são:
Um Esquema JSON consiste em tipos de elementos simples e complexos. Os elementos têm atributos que adicionam regras ao elemento. Quando esses elementos e atributos são arrastados para um Formulário adaptável, eles são mapeados automaticamente para o componente Formulário adaptativo correspondente.
Esse mapeamento de elementos JSON com componentes de Formulário adaptável é o seguinte:
"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."
}
Elemento, propriedades ou atributos JSON | Componente de formulário adaptável |
---|---|
Propriedades de string com a restrição enum e enumNames. Sintaxe,
|
Componente suspenso:
|
Propriedade String com restrição de formato. Por exemplo, email e data. Sintaxe,
|
|
|
Campo de texto |
propriedade number |
Campo numérico com subtipo definido para flutuante |
propriedade integer |
Campo numérico com subtipo definido como inteiro |
propriedade booleana |
Alternar |
propriedade de objeto |
Painel |
propriedade array | Painel repetível com mín. e máx. iguais a minItems e maxItems, respectivamente. Somente arrays homogêneos são compatíveis. Portanto, a restrição de itens deve ser um objeto e não uma matriz. |
O Formulário adaptável usa as informações disponíveis no Esquema JSON para mapear cada campo gerado. Em especial:
title
serve como rótulo para os componentes do Formulário adaptável.description
é definida como descrição longa para um componente Formulário adaptável.default
serve como valor inicial de um campo de Formulário adaptável.maxLength
a propriedade é definida como maxlength
do componente de campo de texto.minimum
, maximum
, exclusiveMinimum
e exclusiveMaximum
As propriedades são usadas para o componente de caixa numérica.DatePicker component
propriedades adicionais do Esquema JSON minDate
e maxDate
são fornecidas.minItems
e maxItems
As propriedades são usadas para restringir o número de itens/campos que podem ser adicionados ou removidos de um componente do painel.readOnly
a propriedade define a variável readonly
de um componente de Formulário adaptável.required
marca o campo Formulário adaptável como obrigatório, enquanto no painel (onde o tipo é objeto), os dados JSON enviados finais têm campos com valor vazio correspondente a esse objeto.pattern
é definida como o padrão de validação (expressão regular) no Formulário adaptável.Aqui está um exemplo de um Esquema JSON.
{
"$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"
}
}
}
As chaves de definição são usadas para identificar esquemas reutilizáveis. As definições de esquema reutilizáveis são usadas para criar fragmentos. Um exemplo de Esquema JSON com definições é fornecido abaixo:
{
"$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" }
}
}
O exemplo acima define um registro de cliente, em que cada cliente tem um endereço de envio e de faturamento. A estrutura de ambos os endereços é a mesma — os endereços têm um endereço de rua, cidade e estado — portanto, é uma boa ideia não duplicar os endereços. Também facilita a adição e exclusão de campos para qualquer alteração futura.
Você pode usar o aem:afProperties propriedade para pré-configurar o campo Esquema JSON para mapear para um componente Formulário adaptável personalizado. Um exemplo é listado abaixo:
{
"properties": {
"sizeInMB": {
"type": "integer",
"minimum": 16,
"maximum": 512,
"aem:afProperties" : {
"sling:resourceType" : "/apps/fd/af/components/guideTextBox",
"guideNodeClass" : "guideTextBox"
}
}
},
"required": [ "sizeInMB" ],
"additionalProperties": false
}
É possível adicionar as seguintes restrições aos elementos do Esquema JSON para limitar os valores aceitáveis para um componente de Formulário adaptável:
Propriedade do esquema |
Tipo de dados |
Descrição |
Componente |
|
Sequência de caracteres |
Especifica o limite superior para valores numéricos e datas. Por padrão, o valor máximo é incluído. |
|
|
Sequência de caracteres |
Especifica o limite inferior para valores numéricos e datas. Por padrão, o valor mínimo é incluído. |
|
|
Booleano |
Se verdadeiro, o valor numérico ou a data especificada no componente do formulário deve ser menor que o valor numérico ou a data especificada para a propriedade máxima. Se falso, o valor numérico ou a data especificada no componente do formulário deve ser menor ou igual ao valor numérico ou à data especificada para a propriedade maximum . |
|
|
Booleano |
Se verdadeiro, o valor numérico ou a data especificada no componente do formulário deve ser maior que o valor numérico ou a data especificada para a propriedade mínima. Se falso, o valor numérico ou a data especificada no componente do formulário deve ser maior ou igual ao valor numérico ou à data especificada para a propriedade mínima. |
|
|
Sequência de caracteres |
Especifica o número mínimo de caracteres permitidos em um componente. O comprimento mínimo deve ser igual ou superior a zero. |
|
maxLength |
Sequência de caracteres | Especifica o número máximo de caracteres permitidos em um componente. O comprimento máximo deve ser igual ou superior a zero. |
|
|
Sequência de caracteres |
Especifica a sequência de caracteres. Um componente aceita os caracteres se eles estiverem em conformidade com o padrão especificado. A propriedade pattern mapeia para o padrão de validação do componente Formulário adaptável correspondente. |
|
maxItems |
Sequência de caracteres | Especifica o número máximo de itens em uma matriz. Os itens máximos devem ser iguais ou maiores que zero. | |
minItems |
Sequência de caracteres | Especifica o número mínimo de itens em uma matriz. Os itens mínimos devem ser iguais ou maiores que zero. |
O Adaptive Forms não suporta as seguintes construções do Esquema JSON:
Por que não consigo arrastar elementos individuais de um subformulário (estrutura gerada de qualquer tipo complexo) para subformulários repetíveis (os valores minOccours ou maxOccurs são maiores que 1)?
Em um subformulário repetível, é necessário usar o subformulário completo. Se quiser apenas campos seletivos, use toda a estrutura e exclua os não desejados.
Tenho uma estrutura complexa longa no Localizador de conteúdo. Como posso encontrar um elemento específico?
Você tem duas opções:
Qual deve ser a extensão do arquivo de esquema JSON?
A extensão do arquivo Esquema JSON deve ser .schema.json. Por exemplo, <filename>.schema.json.