Dynamic question type
Dynamic question typeにより、フィールドの質問タイプとウィジェットをAPIレスポンスや計算値に基づいて実行時に決定できます。
Dynamic Question Type機能により、フィールドの入力ウィジェットと検証動作を、フォーム設計時ではなく実行時に決定できます。これは、収集するデータのタイプがサーバー側の設定、APIレスポンス、または前のフィールド値に依存する場合に使用される高度なrtSurvey拡張機能です。
一般的なユースケースは、サーバーがどのフィールドが必要か、それらのタイプ(text、integer、selectなど)、および利用可能なオプションが何かを定義する設定可能な検査チェックリストです — フォームを設定ごとに再構築する必要はありません。
仕組み
ダイナミック質問タイプとしてマークされたフィールドは、callapi()を使用してAPIから設定を取得します。APIレスポンスには以下が定義されます:
- レンダリングする入力タイプ(text、integer、select_oneなど)
- 利用可能な選択肢(selectタイプの場合)
- 検証ルール
フィールドには内部的にspecialFeature: isDynamicQuestionTypeがマークされ、フォームエンジンが静的フォーム定義ではなくAPIレスポンスを使用してウィジェットを構築するように指示します。
セットアップ
ステップ1:フィールド設定を取得する
callapi()を使用してcalculateフィールドでダイナミック設定を取得します:
| 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:ダイナミックフィールドで設定を参照する
ダイナミックフィールドはそのappearanceまたはconstraintでcallapi-verify()を使用して取得された設定にリンクします:
| type | name | label | appearance |
|---|---|---|---|
| text | inspection_result | 検査結果 | callapi-verify(dynamicParams) |
フォームエンジンはfield_configを読み取り、inspection_resultをtext、integer、またはselect_oneフィールドとしてレンダリングするかどうかを動的に決定します。
APIレスポンス形式
APIはフィールド設定を説明するJSONオブジェクトを返すべきです。典型的なレスポンス:
{
"config": {
"type": "select_one",
"choices": [
{"value": "pass", "label": "合格"},
{"value": "fail", "label": "不合格"},
{"value": "na", "label": "N/A"}
],
"required": true,
"constraint": ". != ''"
}
}
例:設定可能な検査フォーム
検査カテゴリに基づいてチェックリスト項目とその回答タイプがサーバーから取得される検査フォーム:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| select_one inspection_type | insp_type | 検査タイプ | ||
| calculate | checklist_config | callapi | callapi('POST', 'https://api.example.com/checklist', 1, 2, 0, '$.items', 10000, 0, '', '', '{"type": "##insp_type##"}') | |
| text | item_1 | 項目1 | callapi-verify(dynamicParams) | |
| text | item_2 | 項目2 | callapi-verify(dynamicParams) | |
| text | item_3 | 項目3 | callapi-verify(dynamicParams) |
サーバーはinsp_typeに基づいて各項目の正しいウィジェットタイプ、ラベル、選択肢、および検証を返します。
ベストプラクティス
- フィールド構造が実際に実行時に変化する場合にのみダイナミック質問タイプを使用してください — 静的なフォームには標準の質問タイプを使用してください。
- 設定APIが迅速に(2秒以内に)応答し、フィールドネットワークで利用可能であることを確認してください。
- APIが到達できない場合のために、フォームで合理的なフォールバックを常に定義してください — メモ付きのプレーンな
textフィールドは壊れたウィジェットよりも優れています。 - APIレスポンススキーマをバージョン管理してください — レスポンス形式の変更はそのエンドポイントを使用しているすべてのアクティブなフォームに影響します。
- デプロイ前にAPIが返す可能性のあるすべてのフィールドタイプの組み合わせをテストしてください。
制限事項
- ダイナミック質問タイプは設定を取得するためにネットワーク接続が必要です。
- 動的に利用可能なウィジェットタイプの完全な範囲はrtSurveyクライアントバージョンに依存します — ターゲットバージョンをテストしてください。
- これはXLSForm標準仕様に相当するものがない高度なrtSurvey拡張機能です。
- フィールド定義がフォームとAPIレスポンスの両方に一部存在するため、デバッグエラーの追跡が難しくなります。