Dynamic Question Type機能により、フィールドの入力ウィジェットと検証動作を、フォーム設計時ではなく実行時に決定できます。これは、収集するデータのタイプがサーバー側の設定、APIレスポンス、または前のフィールド値に依存する場合に使用される高度なrtSurvey拡張機能です。

一般的なユースケースは、サーバーがどのフィールドが必要か、それらのタイプ(text、integer、selectなど)、および利用可能なオプションが何かを定義する設定可能な検査チェックリストです — フォームを設定ごとに再構築する必要はありません。


仕組み

ダイナミック質問タイプとしてマークされたフィールドは、callapi()を使用してAPIから設定を取得します。APIレスポンスには以下が定義されます:

  • レンダリングする入力タイプ(text、integer、select_oneなど)
  • 利用可能な選択肢(selectタイプの場合)
  • 検証ルール

フィールドには内部的にspecialFeature: isDynamicQuestionTypeがマークされ、フォームエンジンが静的フォーム定義ではなくAPIレスポンスを使用してウィジェットを構築するように指示します。


セットアップ

ステップ1:フィールド設定を取得する

callapi()を使用してcalculateフィールドでダイナミック設定を取得します:

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:ダイナミックフィールドで設定を参照する

ダイナミックフィールドはそのappearanceまたはconstraintcallapi-verify()を使用して取得された設定にリンクします:

typenamelabelappearance
textinspection_result検査結果callapi-verify(dynamicParams)

フォームエンジンはfield_configを読み取り、inspection_resulttextinteger、またはselect_oneフィールドとしてレンダリングするかどうかを動的に決定します。


APIレスポンス形式

APIはフィールド設定を説明するJSONオブジェクトを返すべきです。典型的なレスポンス:

  {
  "config": {
    "type": "select_one",
    "choices": [
      {"value": "pass", "label": "合格"},
      {"value": "fail", "label": "不合格"},
      {"value": "na", "label": "N/A"}
    ],
    "required": true,
    "constraint": ". != ''"
  }
}
  

例:設定可能な検査フォーム

検査カテゴリに基づいてチェックリスト項目とその回答タイプがサーバーから取得される検査フォーム:

typenamelabelappearancecalculation
select_one inspection_typeinsp_type検査タイプ
calculatechecklist_configcallapicallapi('POST', 'https://api.example.com/checklist', 1, 2, 0, '$.items', 10000, 0, '', '', '{"type": "##insp_type##"}')
textitem_1項目1callapi-verify(dynamicParams)
textitem_2項目2callapi-verify(dynamicParams)
textitem_3項目3callapi-verify(dynamicParams)

サーバーはinsp_typeに基づいて各項目の正しいウィジェットタイプ、ラベル、選択肢、および検証を返します。


ベストプラクティス

  1. フィールド構造が実際に実行時に変化する場合にのみダイナミック質問タイプを使用してください — 静的なフォームには標準の質問タイプを使用してください。
  2. 設定APIが迅速に(2秒以内に)応答し、フィールドネットワークで利用可能であることを確認してください。
  3. APIが到達できない場合のために、フォームで合理的なフォールバックを常に定義してください — メモ付きのプレーンなtextフィールドは壊れたウィジェットよりも優れています。
  4. APIレスポンススキーマをバージョン管理してください — レスポンス形式の変更はそのエンドポイントを使用しているすべてのアクティブなフォームに影響します。
  5. デプロイ前にAPIが返す可能性のあるすべてのフィールドタイプの組み合わせをテストしてください。

制限事項

  • ダイナミック質問タイプは設定を取得するためにネットワーク接続が必要です。
  • 動的に利用可能なウィジェットタイプの完全な範囲はrtSurveyクライアントバージョンに依存します — ターゲットバージョンをテストしてください。
  • これはXLSForm標準仕様に相当するものがない高度なrtSurvey拡張機能です。
  • フィールド定義がフォームとAPIレスポンスの両方に一部存在するため、デバッグエラーの追跡が難しくなります。
このページは役に立ちましたか?