Динамічний тип питання
Динамічний тип питання дозволяє типу питання поля та його віджету визначатися під час виконання на основі відповіді API або обчисленого значення.
Функція Динамічний тип питання дозволяє віджету введення поля та поведінці перевірки визначатися під час виконання, а не під час проектування форми. Це розширене розширення rtSurvey, що використовується, коли тип даних для збору залежить від серверної конфігурації, відповіді API або значення попереднього поля.
Поширеним варіантом використання є налаштовуваний контрольний список інспекції, де сервер визначає, які поля є обов’язковими, якого вони типу (text, integer, select тощо) і які варіанти доступні — без перебудови форми для кожної конфігурації.
Як це працює
Поле, позначене як динамічний тип питання, використовує callapi() для отримання конфігурації від API. Відповідь API визначає:
- Тип введення для відображення (text, integer, select_one тощо)
- Доступні варіанти (для типів select)
- Правила перевірки
Поле позначено внутрішньо як specialFeature: isDynamicQuestionType, що повідомляє движку форми про необхідність використання відповіді API для побудови віджета замість статичного визначення форми.
Налаштування
Крок 1: Отримання конфігурації поля
Використовуйте поле calculate з callapi() для отримання динамічної конфігурації:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| calculate | field_config | callapi | callapi('POST', 'https://api.example.com/field-config', 1, 2, 0, '$.config', 10000, 0, '', '', '{"form_id": "##form_id##", "field_id": "inspection_result"}') |
Крок 2: Посилання на конфігурацію в динамічному полі
Динамічне поле використовує callapi-verify() у своєму appearance або constraint для зв’язку з отриманою конфігурацією:
| type | name | label | appearance |
|---|---|---|---|
| text | inspection_result | Inspection result | callapi-verify(dynamicParams) |
Формат відповіді API
API повинен повертати JSON-об’єкт, що описує конфігурацію поля:
{
"config": {
"type": "select_one",
"choices": [
{"value": "pass", "label": "Pass"},
{"value": "fail", "label": "Fail"},
{"value": "na", "label": "N/A"}
],
"required": true,
"constraint": ". != ''"
}
}
Найкращі практики
- Використовуйте динамічні типи питань лише коли структура поля дійсно змінюється під час виконання.
- Переконайтеся, що API конфігурації відповідає швидко (менше 2 секунд).
- Завжди визначайте розумне резервне значення у формі на випадок недоступності API.
- Версіонуйте схему відповіді API.
- Тестуйте кожну комбінацію типів полів, які може повертати API, перед розгортанням.
Обмеження
- Потребує підключення до мережі для отримання конфігурації.
- Це розширене розширення rtSurvey без еквівалента в стандартній специфікації XLSForm.