式の作成

調査で式を使用して、質問のデフォルトの動作を制御できます。 [relevant] 列で式を使用して、1 つの質問または質問のグループを、以前の回答に基づいて非表示/表示にできます。 [relevant] 列の式を通して質問を非表示にすると、質問のデータは送信されません。

注意:

ArcGIS Survey123 フィールド アプリでは、[relevant] 式により後で非表示にされる質問の回答が入力された場合、回答が消去されます。 質問が再び関連するようになった場合、新しい回答を入力する必要があります。 Web アプリでは、回答は消去されません。そのため、質問が再び関連するようになった場合、前に入力した回答が使用されます。

式は、[readonly] 列に適用することもできます。これにより、式の結果に基づいて、1 つの質問または質問のグループへの入力を無効にできます。 [required] 列も式をサポートしているため、調査でユーザーが特定の条件下でのみ質問に回答するようにすることができます。

注意:

Web アプリでは、読み取り専用の式はサポートされていません。

以前の質問は必ず ${field_name} という形式によって式で参照される必要があります。

質問の表示設定

[body::esri:visible] 列を使用して、式によって質問を非表示にできます。 この列に含まれる式で true と評価されない場合、質問は非表示になりますが、質問のコンテンツは維持されたままです。 たとえば、${edit_location}='yes' という式では、edit_location の質問が yes と等しい場合にのみ質問が表示されます。

この動作は [relevant] 列の動作と似ています。どちらの列でも、列内の式で true と評価されるまで質問は非表示になります。 主な違いは、[body::esri:visible] では式によって非表示になった質問の値はクリアされず、既存の値がフィーチャ レイヤーに送信されることです。 質問に関連性がない場合、値が計算または保存されないようにするには、[body::esri:visible] の代わりに [relevant] 列を使用します。

[body::esri:visible] 列か [relevant] 列を使用して質問の表示/非表示を制御する場合、必須、デフォルト、制限、入力マスクは、質問が表示される場合にのみ適用されます。

質問タイプを hidden に設定したり表示設定を hidden に設定したりすることで質問の表示/非表示を制御することもできますが、これらは式で制御することはできません。

注意:

画像、オーディオ、ファイルの質問では、[body::esri:visible] 列を基準にした非表示がサポートされていません。

シンプルな式

これらの式の最適な使用方法は、特定の回答が前もって提供されなかった場合に、質問の動作または可視性を変更することです。 たとえば、次の式は、以前の質問に対する回答が true であるかどうかを確認します。

${previous_question} = 'true'

次の例は、以前の質問に対する回答が 100 以上であるかどうかを確認します。

${previous_question} < 100

[select_multiple] 質問タイプでは、他の質問タイプと異なる方法で値が保存されます。チェックされた各回答が選択順に入力され、カンマで区切られます。 たとえば、回答 A と B をこの順序で選択すると、回答は A,B と表示されます。 [select_multiple] の質問を式の一部として使用するには、selected 関数を使用する必要があります。 次の例は、ユーザーが以前の質問に A と回答したかどうかを確認し、選択された他の回答に関係なく機能します。

selected(${previous_question}, 'A')

count-selected 関数は、[select_multiple] の質問で選択されたオプションの数をカウントし、その数を操作できるようにします。 次の例は、以前の質問で 3 つ以上の選択肢が選択されたかどうかを確認します。

count-selected(${previous_question}) > 2

表示設定を count-selected にし、[image] または [file] の質問の制約として multiline 関数を使用して、送信されるファイルの数を制御できます。

数式

次の例は、複数の演算子と質問を結合します。

${previous_question} + ${other_previous_question} <= 100

数学演算子を使用する場合、値を数値に変換する必要が生じる可能性があります。 前述の例では、previous_questionother_previous_question は整数または小数だと想定されていますが、質問タイプが文字列の場合は以下のようにキャストします。

int(${previous_question}) + int(${other_previous_question}) <= 100

[date] の質問に対して数式を実行することもできます。これらは、1970 年 1 月 1 日からの経過時間をミリ秒単位で表したエポック タイムとして保存されます。 次の式では、以前の質問に対する回答が今日から 2 週間より前の場合のみ、質問が表示されます。

if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)

正規表現

正規表現とは、文字列のパターンに一致させるために使用される一連の文字のことです。 Survey123 では、パターンが一致すると式は true を返し、パターンに一致しなければ false を返します。

別の質問によって提供される文字列が所定の形式でない場合に、式を許可する任意の列で正規表現を使用し、質問の動作を変更できます。 次の例は、[relevant] 列に配置されると、他の質問に対する回答が文字のみで構成される場合に、質問が表示されます。

regex(${question},'[A-Za-z]')

次の例は、道路名に関する select_one 質問の [choice_filter] 列に配置すると、前の質問で選択された「city」という名前の都市名と一致する「citystreets」リスト内の道路の選択肢のみを表示します。

regex(citystreets,${city})

正規表現の詳細については、「」をご参照ください。