JSON 스키마를 양식 모델로 사용하여 적응형 양식을 작성하려면 JSON 스키마에 대한 기본적인 이해가 필요합니다. 이 아티클 이전에 다음 콘텐츠를 읽어 보시기 바랍니다.
AEM Forms은 기존 JSON 스키마를 양식 모델로 사용하여 적응형 양식 작성을 지원합니다. 이 JSON 스키마는 조직의 백엔드 시스템에서 데이터를 생성하거나 사용하는 구조를 나타냅니다. 사용하는 JSON 스키마는 v4 사양과 호환되어야 합니다.
JSON 스키마 사용의 주요 기능은 다음과 같습니다.
JSON 스키마는 간단하고 복잡한 요소 유형으로 구성됩니다. 요소에는 요소에 규칙을 추가하는 속성이 있습니다. 이러한 요소와 속성을 적응형 양식으로 드래그하면 해당 적응형 양식 구성 요소에 자동으로 매핑됩니다.
적응형 양식 구성 요소가 있는 JSON 요소의 매핑은 다음과 같습니다.
JSON 요소, 속성 또는 속성 | 적응형 양식 구성 요소 |
---|---|
enum 및 enumNames 제약 조건이 있는 문자열 속성입니다. 구문,
|
드롭다운 구성 요소:
|
형식 제약 조건이 있는 문자열 속성입니다. 예: 이메일 및 날짜. 구문,
|
|
{ "type" :"string", } |
텍스트 필드 |
number 속성 |
하위 유형이 float 으로 설정된 숫자 필드 |
정수 속성 |
하위 유형이 정수 으로 설정된 숫자 필드 |
boolean 속성 |
전환 |
object 속성 |
패널 |
배열 속성 | 최소 및 최대 값이 minItems 및 maxItems와 동일한 반복 가능한 패널. 단일 배열만 지원됩니다. 따라서 항목 제약 조건은 배열이 아닌 개체여야 합니다. |
적응형 양식에서는 JSON 스키마에서 사용할 수 있는 정보를 사용하여 생성된 각 필드를 매핑합니다. 특히:
다음은 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"
}
}
}
정의 키는 재사용 가능한 스키마를 식별하는 데 사용됩니다. 재사용 가능한 스키마 정의는 조각을 만드는 데 사용됩니다. XSD의 복잡한 형식을 식별하는 것과 유사합니다. 정의가 있는 샘플 JSON 스키마는 다음과 같습니다.
{
"$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" }
}
}
위의 예에서는 고객 레코드를 정의합니다. 각 고객은 배송 주소와 청구 주소를 모두 갖습니다. 두 주소의 구조는 동일하며, 주소는 주소, 시/도가 있으므로 주소를 중복하지 않는 것이 좋습니다. 또한 나중에 변경할 수 있도록 필드를 추가하거나 삭제할 수 있습니다.
aem:afProperties 속성을 사용하여 JSON 스키마 필드를 사전 구성하여 사용자 지정 적응형 양식 구성 요소에 매핑할 수 있습니다. 예제는 다음과 같습니다.
{
"properties": {
"sizeInMB": {
"type": "integer",
"minimum": 16,
"maximum": 512,
"aem:afProperties" : {
"sling:resourceType" : "/apps/fd/af/components/guideTextBox",
"guideNodeClass" : "guideTextBox"
}
}
},
"required": [ "sizeInMB" ],
"additionalProperties": false
}
적응형 양식 구성 요소에 사용할 수 있는 값을 제한하도록 JSON 스키마 요소에 다음 제한 사항을 추가할 수 있습니다.
스키마 속성 |
데이터 유형 |
설명 |
구성 요소 |
|
문자열 |
숫자 값과 날짜에 대한 상한을 지정합니다. 기본적으로 최대값이 포함됩니다. |
|
|
문자열 |
숫자 값 및 날짜에 대해 하한 값을 지정합니다. 기본적으로 최소값은 포함됩니다. |
|
|
부울 |
true인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최대 속성에 대해 지정된 숫자 값 또는 날짜보다 작아야 합니다. false인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최대 속성에 대해 지정된 숫자 값 또는 날짜보다 작거나 같아야 합니다. |
|
|
부울 |
true인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최소 속성에 지정된 숫자 값 또는 날짜보다 커야 합니다. false인 경우 양식의 구성 요소에 지정된 숫자 값 또는 날짜는 최소 속성에 지정된 숫자 값 또는 날짜보다 크거나 같아야 합니다. |
|
|
문자열 |
구성 요소에 허용되는 최소 문자 수를 지정합니다. 최소 길이는 0보다 크거나 같아야 합니다. |
|
maxLength |
문자열 | 구성 요소에 허용되는 최대 문자 수를 지정합니다. 최대 길이는 0보다 크거나 같아야 합니다. |
|
|
문자열 |
문자 시퀀스를 지정합니다. 구성 요소는 문자가 지정된 패턴을 따르는 경우 문자를 허용합니다. 패턴 속성은 해당 적응형 양식 구성 요소의 유효성 검사 패턴에 매핑됩니다. |
|
maxItems | 문자열 | 배열의 최대 항목 수를 지정합니다. 최대 항목은 0보다 크거나 같아야 합니다. | |
minItems | 문자열 | 배열에 있는 최소 항목 수를 지정합니다. 최소 항목은 0보다 크거나 같아야 합니다. |
적응형 양식은 다음 JSON 스키마 구문을 지원하지 않습니다.
반복 가능한 하위 양식에 대해 하위 폼의 개별 요소(복잡한 형식에서 생성된 구조)를 드래그할 수 없는 이유는 무엇입니까(minOccours 또는 maxOccurs 값이 1보다 큼)?
반복 가능한 하위 양식에서는 전체 하위 양식을 사용해야 합니다. 선택 필드만 원하는 경우 전체 구조를 사용하고 원치 않는 필드를 삭제합니다.
Content Finder에는 구조가 매우 복잡합니다. 특정 요소를 어떻게 찾을 수 있습니까?
두 가지 옵션이 있습니다.