Функція Динамічний тип питання дозволяє віджету введення поля та поведінці перевірки визначатися під час виконання, а не під час проектування форми. Це розширене розширення rtSurvey, що використовується, коли тип даних для збору залежить від серверної конфігурації, відповіді API або значення попереднього поля.

Поширеним варіантом використання є налаштовуваний контрольний список інспекції, де сервер визначає, які поля є обов’язковими, якого вони типу (text, integer, select тощо) і які варіанти доступні — без перебудови форми для кожної конфігурації.


Як це працює

Поле, позначене як динамічний тип питання, використовує callapi() для отримання конфігурації від API. Відповідь API визначає:

  • Тип введення для відображення (text, integer, select_one тощо)
  • Доступні варіанти (для типів select)
  • Правила перевірки

Поле позначено внутрішньо як specialFeature: isDynamicQuestionType, що повідомляє движку форми про необхідність використання відповіді API для побудови віджета замість статичного визначення форми.


Налаштування

Крок 1: Отримання конфігурації поля

Використовуйте поле calculate з callapi() для отримання динамічної конфігурації:

typenamelabelappearancecalculation
calculatefield_configcallapicallapi('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 для зв’язку з отриманою конфігурацією:

typenamelabelappearance
textinspection_resultInspection resultcallapi-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": ". != ''"
  }
}
  

Найкращі практики

  1. Використовуйте динамічні типи питань лише коли структура поля дійсно змінюється під час виконання.
  2. Переконайтеся, що API конфігурації відповідає швидко (менше 2 секунд).
  3. Завжди визначайте розумне резервне значення у формі на випадок недоступності API.
  4. Версіонуйте схему відповіді API.
  5. Тестуйте кожну комбінацію типів полів, які може повертати API, перед розгортанням.

Обмеження

  • Потребує підключення до мережі для отримання конфігурації.
  • Це розширене розширення rtSurvey без еквівалента в стандартній специфікації XLSForm.
Чи була ця сторінка корисною?