データの取り出しまたは表示順序に関する条件を使用するタイミングを指定します。
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 では、ナビゲーションの順序は前出のものと同じです。ただし、条件のない順序が定義されているために条件のいずれも満たされない場合、ナビゲーターは条件のない CustomerId による順序に従います。
For each コマンド Xfor each コマンド Xfor First コマンド Like 演算子