レポートのエレメントは、if ステートメントを使用して、条件付きで表示または非表示にすることができます。 開始の ${if expression} プレースホルダーに式を入力し、条件セグメントの終了を示す ${/} を入力することで、if ステートメントを使用できます。 レポートの一部を表示または非表示にするために使用できる if ステートメントの例を次に示します。
- ${if photo1} では、photo1 の質問が回答された場合にだけ、このセクションが表示されます。
- ${if integer1>0} では、integer1 の質問に対する回答が正の値であった場合にだけ、このセクションが表示されます。
- ${if ((geopoint1 | getValue:"y")>0)} では、ジオポイントが北半球にある場合にだけ、このセクションが表示されます。
- ${if multiple_choice1 | selected:"A"} は、複数の選択肢の質問で選択肢「A」が選択された場合にのみ、このセクションを表示します。
- ${if (repeat1 | getValue:"count")>=3} は、repeat1 に 3 つ以上のレコードを含まれる場合にのみセクションを表示します。
次の例では、high が優先順位の高い単一選択の質問に対して選択されている場合にのみ、2 行目のテキストが表示されます。
${if priority | selected:"high"}
High priority issues must be addressed within seven days.
${/}回答が質問に対する値を含んでいるかどうかを決定するには、フィールド名を直接参照する if ステートメントのみを使用し、他の演算子を使用しないでください (例: ${if photo1})。 この形式は、空の文字列、NULL 値、および未定義の値がすべて空の値と見なされることを保証します。 この形式は、文字列、数値、日付、および添付ファイルのフィールド タイプに適用されます。 この形式を繰り返しと共に使用した場合、少なくとも 1 つのインスタンスが繰り返しに存在する限り、このセクションが表示されます。
日時の質問で条件ステートメントを使用するには、エポック時間 (1970 年 1 月 1 日からのミリ秒) を使用して計算します。 たとえば、${if (date1|getValue:"") < 1602735375000} は日付フィールドの値が 2020 年 10 月 14 日より前である場合にのみセクションを表示します。 レポート構文には XLSForm の today() 関数または now() 関数に対応するものがないので、レポートの印刷時に関連する時間の条件ステートメントを構築することはできません。
if ステートメントでは、次の論理演算子がサポートされています。
| 演算子 | 説明 |
|---|---|
| || | 2 つのステートメントのいずれかが true を返す場合、true になります |
| && | 所定のステートメントの両方が true を返す場合、true になります |
| ! | ステートメントが true でない場合、true になります |
| == | 所定の 2 つの値が互いに等しい場合、true になります |
| != | 所定の 2 つの値が互いに等しくない場合、true になります |
| > | 最初の値が 2 つ目の値より大きいかどうかを評価します |
| >= | 最初の値が 2 つ目の値以上であるかどうかを評価します。 |
| < | 最初の値が 2 つ目の値より小さいかどうかを評価します |
| <= | 最初の値が 2 つ目の値以下であるかどうかを評価します。 |
レポートでテーブルを使用して、個々の繰り返しレコードまたはレコードのサマリーを表示できます。 値の存在しないテーブルを非表示にする条件ステートメントを使用するには、開始プレースホルダーと終了プレースホルダーをテーブルの外側 (テーブルの直前と直後) に配置する必要があります。 テーブルに値が存在しない場合にテーブルのヘッダー行のみを表示する条件ステートメントを使用するには、開始プレースホルダーをテーブルの最初のセル内に配置し、終了プレースホルダーをテーブルの最後のセル内に配置する必要があります。