ExpressionScript examples/ja

=構造=

この記事の最初の部分では、式の使用方法と式を検索／追加する場所について説明します. 2番目のセクションでは、式の使用例を紹介します.

=式のカテゴリー=

LimeSurveyは次の目的で式を使います.
 * 出現条件
 * 検証
 * テキスト出力
 * 回答保存

出現条件
目的: 質問グループ／質問を非表示にする

出現条件は、質問グループまたは質問を表示するかどうかを制御します. 式の結果が "true"（つまり1）の場合、その要素が表示されます. それ以外の場合（式の結果が "false"（つまり0）の場合）、その要素は非表示になります.

検証
目的: 質問／サブ質問／回答の入力／操作を検証する

検証は、回答者の質問に対する入力や操作が有効かどうかを制御します. 式の結果が"true"（すなわち1）である場合、当該の要素および検証メッセージに"good"クラスが適用されます. 一方、式の結果が"false"（すなわち0）である場合、当該の要素および検証メッセージに"error"クラスが適用されます. template.cssでこれらのクラスのスタイルを宣言することができます.

テキスト出力
目的: （何かをして）テキストを出力する

式を使用してテキストを書き出すことができます. たとえば、何かをテストまたは計算し、テストまたは計算の結果に応じて出力を指定することができます. また、先行する質問のテキスト、回答、質問タイプ等を挿入するために使用することもできます. テキスト出力は、テキストが表示されているあらゆる場所で使用でき、あらゆる種類の結果を返すことができます.

回答を保存する
目的: （何かをして、）（テキストを書き出し）データベースに何かを保存する

式質問タイプを使用して、データベースに何かを保存することができます. 式を使って何かを行い、式の質問（テキスト表示に似ています）を表示し、その式の結果をデータベースに格納します. 回答テーブルに回答を格納します. 結果は統計機能内で使用することもできますが、LimeSurveyエクスポート機能によって提供される形式の1つにインポートすることもできます.

=式の例=

回答を自動入力するために非表示の質問を使う
問題: Q1とQ2という2つの質問があるとします. Q1では回答者に年齢を聞きます. Q2では、回答者の年齢により20歳未満、20歳、20歳以上の3つのグループに分類しています. したがって、Q2は前述の条件に従い、"1", "2", "3"の値を使用します. また、Q2を目に見えないようにしなければなりません（この質問はアンケートには表示されませんが、回答テーブル内の"バックグラウンドプロセス"を介して処理されます）.

式の質問タイプを使用してデータベースに格納するには: Q2=if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
 * まず、数値入力質問としてを質問（コードQ1）を作成します.
 * 次に、式の質問を作成します（コードQ2）.
 * Q2の"表示設定"タブ:
 * "常にこの質問を非表示にする"フィールドを"オン"に設定します.
 * "式"フィールドに式を入力します:

プレースホルダーを使って要約ページを作成する
このチュートリアルでは、アンケートの最後に式マネージャーのプレースホルダーを使ってすべての質問と回答をリストする方法を示します. さらに、回答された質問のみ表示する方法を示します.

この例は、[[Media:Limesurvey_Expression_Manager_Placeholder_Demo_Survey.lss|アンケートプレースホルダーのアンケート例]]からダウンロードできます.

'質問タイプはここで使われます. '

1. 択一質問 / 単一のテキスト／数値質問
 * リスト（ドロップダウン）
 * リスト（ラジオ）[L]
 * はい／いいえ [Y]
 * 長いフリーテキスト [T]
 * 短いフリーテキスト [S]
 * 数値入力 [N]
 * 式 [*]

2. サブ質問がある質問
 * 複数の短いテキスト[Q]
 * 複数選択[M]
 * 配列[F]
 * 配列（はい／いいえ／わからない）[C]
 * 配列（10点尺度）[B]

3. 尺度が2つある質問
 * 二元スケール配列 [1]

4. XとYの尺度がある質問
 * 配列（数値） [:]

5. マスク質問
 * テキスト表示 [X]

この簡単な例では、次のような単純なリストになります.

- 質問テキスト: 利用者の回答

択一の質問 / 単一のテキスト／数値を入力する質問
これらすべての質問タイプについて、Limesurveyは単一の回答を保存します.


 * リスト（ドロップダウン）
 * リスト（ラジオ）
 * コメント付きのリスト
 * 5点選択
 * はい／いいえ
 * 短いフリーテキスト
 * 長いフリーテキスト
 * 巨大なフリーテキスト
 * 数値入力
 * 式
 * 日付
 * 性別

質問のコードがq1とすると、質問テキストと回答を次のように参照することができます.

- {q1.question}: {q1.shown}

例:

- 何歳ですか. : 25

その質問に回答したかどうかを確認したい場合は、出力を囲むようにIF文を記述します：

{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}

これは、次のように"翻訳します": もし、質問q1が空白でなければ、出力されるのは、"- "と質問テキストと": "と回答テキスト（join関数は要素を連結して新たな文字列にする）とし、空白の場合は、何も出力しません（""は空文字列です）.

サブ質問付きの質問
これらすべての質問タイプに対して、LimeSurveyはサブ質問を使用します.


 * 複数の短いテキスト
 * 複数選択
 * コメント付き複数選択
 * 配列
 * 配列（5点選択）
 * 配列（10点選択）
 * 配列（はい／いいえ／わからない）
 * 配列（増加／同じ／減少）
 * 配列（行列反転）

質問の質問コードがq2で、サブ質問にSQ001、SQ002（LimeSurveyによる自動採番）という番号が付けられていると仮定して、質問テキストと回答を参照することができます.

- {q2_SQ001.question}: {q2_SQ001.shown}

- {q2_SQ002.question}: {q2_SQ002.shown}

複数選択質問については、選択された各オプションについてYを表示するようになりました.

- {q2_SQ001.question}: {q2_SQ001}

- {q2_SQ002.question}: {q2_SQ002}

...

現時点では、サブ質問の質問文を出力することはできません. この機能に関するリクエストを参照してください.

例1 （質問タイプが複数選択の場合）
- あなたはこれらの自動車ブランドを知っていますか.

-- Mercedes: Y

-- Audi: N

-- Volvo: Y

チェックされた項目だけを出力したい場合は、出力のまわりにIF文を置いて、チェックボックスの値をチェックすることができます.

{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }

「Mercedes, Volvo」のように、選択した項目だけのリストを出力したい場合は、listifop関数を使用します.

{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }

that.q2 はq2のすべてのサブ質問に展開されます. 詳しくはself、this、thatを参照してください.

例 2 （質問タイプが配列（10点尺度）の場合）
- 以下の自動車ブランドを「1=ひどい」から「10=とても良い」の間で評価してください.

-- Mercedes: 7

{if(!is_empty(q3_SQ001),join("- ",q3_SQ001.question,": ",q3_SQ001.shown),"")}

-- Volvo: 9

評価された項目だけを出力したい場合は、出力のまわりにIF文を置いて、現在のサブ質問に答えたかどうかを以下のようにして調べることができます.

{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }

たとえば、「Audi / Volvo」のように、選択された項目のうち、8を超えるもののリストを出力したい場合は、listifop関数を使用します.

{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }

２つの尺度を持つ質問
次のコードが使われているとします.
 * 質問コード: q4
 * サブ質問コード: SQ001, SQ002, ...
 * 回答コード尺度1: A1, A2, ...
 * 回答コード尺度2: B1, B2, ...

両方の尺度と最初の2つのサブ質問の結果を出力してみましょう.

- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}

- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}

サブ質問テキストを出力するには、スケールIDをプレースホルダーに追加する必要があります（テキストは両方のスケールで同じです）. したがって、{q4_SQ001.question}の代わりに{q4_SQ001_0.question}か{q4_SQ001_1.question}を使用する必要があります.

サブ質問の結果を1つ以上回答があるもののみエクスポート/表示する場合は、各サブ質問に対して次の構文を使用します.

{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}

二次元の尺度を持つ質問
これは、すべての行列型の質問に適用され、（前に示した表示した行だけでなく）すべてのセルに答えることができます.
 * 配列（テキスト）
 * 配列（数値）

コードの例:
 * 質問コード: q5
 * サブ質問コード: SQ001, SQ002, ...
 * 回答コード: A1, A2, ...

特定の列から特定のサブ質問の結果を参照するには、QuestionCode. '_' . SubQuestionCode. '_' . AnswerCodeを使用する必要があります. 3番目のサブ質問と2番目の列の回答を参照する例: q5_SQ003_A2

両方の尺度と最初の2つのサブ質問の1から3列目の結果を出力しましょう.

- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}

- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}

これらの質問タイプでは、各セル（X軸とY軸の組み合わせ）が1つの回答オプションに等しいため、各セルに対して既存のデータのテストが必要です. 例：

{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}

式マネージャーを評価に使用する
配列質問タイプと評価で式マネージャーをどのように使うかを示す別の例です. 

配列の質問が2つあり、計算結果をデータベースに保存したいとします. 実際は単純なものですが、配列を作成してテストし、ダミー回答を送信して動作するか、完了ページに結果が表示されるかを確認する必要があります.

実装方法の詳細:
 * 式タイプの質問を追加する
 * 次の行を追加する（Q1、Q2が配列質問のコードとする）:
 * {sum(Q1_SQ001.value,Q2_SQ001.value)}

SQ001は任意のサブ質問の既定のコードです. サブ質問コードを変更した場合は、上記の式を適宜調整してください.

配列でem_validation_qを使用する
質問の検証式を使用して、任意の条件で配列を制御できます.

実装方法の詳細:
 * 1つ目の配列 : 択一の配列
 * 質問コードはARRAY
 * サブ質問コードは、SQ01、SQ02、SQ03、SQ04
 * 全体の質問検証式を次のように更新 !is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
 * 2つ目の配列 : テキスト配列
 * 質問コードはARRAYTEXT
 * Y軸のサブ質問コードはSY01、SY02、SY03、SY04
 * 全体の質問検証式を次のように更新 count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)