最近のアクセス:
ヒントとしてのフィルタ

For Each グループ内のフィルタやグリッドの条件は、テーブル間のナビゲーションを向上させ、記述するコードを簡素化します。
これにより、開発者はデータベース構造を気にせず、検索結果をより早く効率的に取得して、クエリをより直観的に解決できます。
次の例では、データベースにはログのエントリーがあります。各ログには、さまざまな言語に翻訳可能なメッセージが関連付けられています。
MessagesByLanguage Transaction
MessageId*                                  
LanguageId*                                 
MessageText
LogEntries Transaction
LogEntryId*
MessageId
任意の言語で LogEntryId、MessageId、および MessageText を表示するレポートが必要であるとします。例:
Language = English
Log Entry Message
007 ATM Deposit
005 Cashier Deposit
001 Cashier Withdraw
Language = Español
Código Mensaje
007 Depósito en Cajero Automático
005 Depósito en Caja Banco
001 Retiro en Caja Banco
これらの項目属性すべてを単一の For each グループまたはグリッド内で参照すると、項目属性間に関係がないという内容のエラーが表示されます。これは、想定されることです。というのは、1 つのログエントリーに [ MessageText ] が 1 つだけではないためです (この場合、2 つのテーブルは関連していません。また、N-1 の関係が成立していても同じです)。
このクエリに対して、たとえば、LanguageId = "ENG" または LanguageId = &LanguageId などのように特定の言語を指定する場合は状況が異なります。このとき、ナビゲーションを決定するフィルタの改善により、2 つのテーブルの関係が解決されます。新しいフィルタにより、これら両方のテーブルは同じ拡張テーブルに属しているように表示され (LogEntry に対してメッセージは 1 つのみ)、1 つの手順だけでクエリを解決できます。
利点:
より直観的なクエリ設計: 以前の GeneXus バージョンで上記のクエリの解決に必要なコードは、次のとおりでした:
For Each
    defined by LogEntryId, MessageId
    For Each
        where LanguageId = &LanguageId
        defined by MessageText
    EndFor
Endfor
現在のコードは次のとおりです:  
 
For Each
    where LanguageId = &LanguageId
    defined by LogEntryId, MessageId, MessageText
Endfor
より効率的な SQL コードを生成します。テーブル間の結合により、クエリは、Select 文 2 つではなく、SQL 文 1 つのみで解決されます。
データベースの構造および関係についての知識は、開発者にそれほど必要ありません。

検討事項

For Each の Where 節またはグリッド条件においてフィルタを指定する必要があります。Reports、Procedures、Work Panels、および Web Panels の全般的な条件は、この機能に対応していません (全般的な条件はすべてのグループには適用されない場合があります)。
フィルタが属す条件には NOT および OR 演算子を含めることはできません。また、フィルタは「=」演算子のみと比較されます。ほかの場合にフィルタは適用されません。たとえば、「LanguageId = &LanguageId and LogEntryId > &LogEntryIdStart」は LanguageId のインスタンスを作成するために有効な条件ですが、「LanguageId = &LanguageId OR LogEntryId > &LogEntryIdStart」は有効ではありません。
次のナビゲーションダイアグラムはこの機能によりアクセスしたテーブルを表示しており、この結果で使用されている値 (この例では &LanguageId) を示しています。
イメージ:12924.jpg
この機能は、SQL によってデータベースにアクセスするジェネレーターでのみサポートされています。

適用範囲

オブジェクト: ProcedureWeb Panel、Work Panel
言語: Java、Ruby、.NET、.NET Mobile
インターフェース: Web、Win









サブページ
Created: 14/09/18 03:13 by Admin Last update: 22/11/10 20:42 by Admin
カテゴリ
Powered by GXwiki 3.0