JClientでは、JClientデータ・パネルで検索モードを有効にしてJUNavigationBarコントロールを使用すると、パラメータ付き問合せをサポートできます。検索モードでは、サポートされているJClientコントロール・バインディングを介してユーザーがデータ・パネルから検索条件を入力できます。
検索モードの操作が可能なデータ・パネルを最も簡単に作成するには、データ・パネルから検索を実行するビジネス・コンポーネント・ビュー・オブジェクトにJUNavigationBarをバインドします。ナビゲーション・バーには「検索」ボタンが表示されます。ユーザーはこのボタンを選択してJClientフォームへのJClientコントロール・バインディングの動作を次のように切り替えます。
検索モード・ボタンの状態は、JUNavigationBarのhasFindButtonプロパティによって制御されます(デフォルトではtrue)。
イテレータ・バインディングは、基本的なデータ反復機能に加え、バインドされたデータ・コレクションと連携することにより、アプリケーション・データの例による問合せ機能の実装を単純化します。次のものが提供されています。
Oracle ADFでは、ゼロ以上のビュー条件行からなるビュー条件(ViewCriteria)コレクションが各データ・コレクションに関連付けられています。 各ビュー条件行(ViewCriteriaRow)は、関連付けられているデータ・コレクション内の行と同じ属性構造を持っていますが、すべての属性値が文字列データ型として扱われる点が異なります。 このデータ型では、比較演算子およびワイルドカード文字が含まれている問合せ条件を入力できます。
たとえば、部門番号が5より大きく、部門名が'ACC%'という文字列に一致するすべての部門を検索する場合、DeptViewコレクション(SCOTTスキーマ内のDEPT表に対する問合せに基づく)に関連付けられているビュー条件行の属性に、次のように入力します。
イテレータ・バインディングの検索モードにより、例による問合せ機能用に、ビュー条件コレクションの属性を移入する検索ページが簡単に作成できます。 イテレータ・バインディングを検索モードに設定すると、関連付けられているビュー条件コレクションに対して別の行セット・イテレータを使用するよう切り替わります。 つまり、検索モードが使用可能に設定されると、イテレータ・バインディングを参照するコントロール・バインディングは、現行のビュー条件行で属性を表示および更新します。 同様に、検索モードになっているイテレータ・バインディングを参照する範囲バインディングでは、現行の例による問合せビュー条件行から表をレンダリングできます。
検索モードが使用不可の場合、イテレータ・バインディングはデータ・コレクションに対して元の行セット・イテレータを使用するよう切り替わります。 切り替えるには、イテレータ・バインディングのsetFindMode()
メソッドをコールして明示的に行うか、またはexecuteQuery()
メソッドをコールして暗黙的に行います。
注意: 検索モードでイテレータ・バインディングの行セット・イテレータに対してcreateRow()
メソッドをコールすることにより、ビュー条件行を追加作成し、続けてその属性に追加条件を移入することが可能です。 デフォルトのセマンティクスでは、同じビュー条件行内の例による問合せの条件は論理的にANDで結合され、一方、異なるビュー条件行から取得した条件は論理的にORで結合されています。 実際には、複数のビュー条件行を使用することは通常ありませんが、理解しておくと機能の説明に役立ちます。 ただし、検索モードに入ると、元のコレクションに行を作成できません。 検索モード以外の場合のみ、ビュー条件に含まれない行を作成することが可能です。
ADFイテレータ・バインディングでは、選択したバックエンド・データ・コントロールの種類に関係なく検索モード機能を使用できますが、現在、ADF Business Componentsのデータ・コントロールのみ、実行時にビュー条件行のビュー条件コレクションを自動的に使用します。 この場合、イテレータ・バインディングのビュー条件機能が、基礎となるADFビュー・オブジェクトに委任されます。ADFビュー・オブジェクトは、ビュー条件行に基づき、適切なSQLのWHERE句条件を自動的に作成することにより、例による問合せ条件を実装します。
他のタイプのデータ・コントロールの場合、現在、ビュー条件コレクションから例による問合せ条件を読み取り、それを適切な実行時検索実装に翻訳するカスタム・コードを含む、データ・コントロール実装のサブクラスが必要となります。
パラメータ付き問合せは、実行時に値が指定されるプレースホルダが含まれた問合せです。たとえば、次のPL/SQL文のmin_salary
は、パラメータ値のプレースホルダで、実行時に値が指定されます。
SELECT ename, job, mgr FROM emp WHERE sal < :min_salary
検索モードのデータ・パネルでは、JClientコントロール・バインディングを使用して、バインドされたビジネス・コンポーネント・ビュー・オブジェクトの属性の中から、「Queriable
」プロパティがtrue
に設定されている属性のフィールドを表示します。ビュー・オブジェクトは、ビジネス・コンポーネントにより実行される最初の問合せを定義します。
一部のJClientコントロール・バインディングでは、検索モードはサポートされません。データ・パネルを検索用に作成する場合は、検索条件の入力を可能にするため、フォームにはビジネス・コンポーネント・ビュー・オブジェクト属性にバインドされる次のコントロールを使用します。
ユーザーが検索モードを選択する際には、前述のリストに含まれていないコントロールをデータ・パネルで使用不可にすることをお薦めします。検索モードをサポートしていないコントロールを使用不可にすることによって、無効な検索条件の送信を防止できます。
さらに、JDeveloper 10gから、ナビゲーション・モードでADFリスト・バインディングを使用するUIコンポーネントは、検索モードで使用できません。 ただし、ナビゲーション・モードのコンポーネント(データにバインドされたComboBoxまたはJListなど)をパネルにドロップして検索モードをアクティブにすると、コンポーネントは使用不可にはならず、検索モードでは空で表示されるはずのコンポーネントで誤ってデータを表示する可能性があります。 検索モードでのナビゲーション・コンポーネントと他のコンポーネントの相互作用を使用不可にするには、2次イテレータを作成し、そのイテレータを使用するように、ナビゲーション・モードのコンポーネントのデータ・バインディングを編集できます。
パネルを実行すると、ナビゲーション・モードのコンポーネントは、検索モードで検索条件コンポーネントを更新するよう、強制しなくなります。 これらのコンポーネントは空のままとなり、検索条件が入力可能になります。
検索モードを使用したデータ・パネルの一般的な使用方法を次に示します。
パネルを検索モードにします。
たとえば、(ビジネス・コンポーネント・ビュー・オブジェクトにバインドされている)JUNavigationBarにデフォルトで表示される「検索」ボタンをクリックします。
すでにフォームに返されているデータの結果を絞り込むための検索条件を入力します。
検索モードにより、ワイルド・カードを使用したアンカー検索が行われます。
ここでは検索列の先頭文字がアンカーとして使用され、入力した文字列で始まるすべての文字列が検索されます。
JClientで同じビュー・オブジェクトにバインドした別のコントロール(JTableコントロールなど)に、パラメータ付き問合せの結果が表示されます。
ビジネス・コンポーネントでのビュー基準の使用方法の詳細は、JavaDocで次のクラスを参照してください。
oracle.jbo.ViewCriteria
Copyright © 1997, 2004, Oracle. All rights reserved.