データの取り出しまたは表示順序に関する条件を使用するタイミングを指定します。
condition | order_attributes… [ when constraint ]
入力値の説明:
condition
データの取り出しに条件を付ける有効な論理エクスプレッションを指定します。
order_attributes
ナビゲーションの順序を示す項目属性の一覧をスペースまたはコンマ区切りで指定します。
constraint
条件または順序を有効にします。
When 節を指定して、データの取り出しまたは表示順序に関する条件を制限することができます。Where 節と、For Each コマンド、Xfor Each コマンド、および Xfor First コマンドの Order 節で使用できます。 グリッドコントロールの条件および順番にも適用します。
- 複数の条件がある場合は、それぞれを足し合わせる (AND で結ばれる) と見なされます。すべての条件が false になると、どの条件も適用されないことになります。
- データベースに SQL でアクセスするジェネレーターだけで使用できます。
- 条件付きの制限を生成するには、クライアント/サーバーアーキテクチャで作業し、使用する DBMS で条件を「評価」できる必要があります。例: つまり、GeneXus が、使用する DBMS の言語で条件を記述できなければなりません。
- 目的のジェネレーターが対応していない、または DBMS の言語で条件を記述できないために条件を生成できない場合は、WHEN が OR に置き換えられ、標準のフィルタに変換されます。
- 制限に項目属性がある場合は、インスタンス化されているものと見なされます。例: 制限はナビゲーションの開始前に評価され、ナビゲーション中に変更されることはありません。
- 制限がどれも True ではなく、条件なしの (When 節のない) Order がない場合、ナビゲーションの順序は未定義になります。この場合、未定義とは順序が示されていないことを意味します。そのため、連続実行においても適用する順序は DBMS によって異なる可能性があります。
- 複数の制限が True の場合、最初に定義された ORDER 節の順序が適用されます。そのため、順序は、優先度の高いものから順に指定する必要があります。
- 条件付き順序は、ブレークとともに指定することはできません。
CustomerName LIKE &CustomerName
WHEN NOT null(&CustomerName);
CustomerIDCard >= &CustomerIDCard
WHEN NOT null(&CustomerIDCard);
上のコードは、次のような意味です。
&CustomerName 変数に値がある場合は、次のフィルタが適用されます: CustomerName LIKE &CustomerNameさらに、&CustomerIDCard 変数に値がある場合は、次のフィルタも適用されます: CustomerIDCard >= &CustomerIDCard フィルタ (ほかのフィルタに含まれ、AND 関係が成り立つ)。 変数に値がない場合、フィルタは適用しません。
For each CustomerName WHEN NOT null(&CustomerName)
Order CustomerIDCard WHEN NOT null(&CustomerIDCard)
...
EndFor
この For Each では、&CustomerName 変数に値があれば、CustomerName の順序でナビゲーションを実行します。値がない場合、&CustomerIDCard に値があれば、順序は CustomerIDCard によって決定されます。どの制約も満たされなかった場合、ナビゲーションの順序は未定義になります。
For each CustomerName WHEN NOT null(&CustomerName)
Order CustomerIDCard WHEN NOT null(&CustomerIDCard)
Order CustomerId
...
EndFor
例の For Each では、ナビゲーションの順序は前出のものと同じです。条件なしの Order があるために条件がまったく発生しない場合、ナビゲーションは、CustomerId の条件なしの Order で実行されます。
For Each コマンド
XFor Each コマンド
XFor First コマンド
Like 演算子
|