検索ボックスのみのファセットで、値が指定されているときだけ検索結果のリージョンを表示したい、という相談があり、ちょっと実装してみました。
ファセットの項目はページ・アイテムではないのですが、JavaScript APIのapex.itemを使うことで値を取得できました。これをクライアント側の条件に指定することによって、リージョンの表示/非表示を切り替えます。
確認するためにアプリケーションを作成しました。以下より、その作業ログになります。
サンプル・データセットのEMP/DEPTを元に、ファセット検索のページを作成します。
最初に空のアプリケーションを作成します。アプリケーション・ビルダーより、アプリケーション作成ウィザードを実行します。名前は任意ですが、ここでは領域の表示/非表示としています。それ以外は追加の設定をせずに、アプリケーションの作成を実行します。
アプリケーションが作成されたら、ファセット検索のページを作成します。ページの作成をクリックします。
ファセット検索をクリックします。
ページ名を従業員検索とし、ブレッドクラムにBreadcrumbを選択します。次に進みます。
ナビゲーションのプリファレンスとして新規ナビゲーション・メニュー・エントリの作成を選択します。これでナビゲーション・メニューからファセット検索のページを開くことができるようになります。次に進みます。
データ・ソースの設定では、表/ビューの名前としてEMP (表)を選択します。今回は文字列の検索ボックスのみを使うので、ファセットのチェックはすべて外します。作成をクリックします。ファセットを選択する部分は画面の下に隠れているはずなので、画面を広げるか、またはスクロールさせて表示させます。
ファセット検索のページが作成されるので、実行してみます。最初に表示されるページでは、検索ボックスに指定がないため、表EMPの全件が表示されます。
検索ボックスに文字列を入力して実行をすると、検索結果が絞り込まれます。このときだけリージョンを表示する、という設定を行います。
ページ・デザイナにてファセット検索のページを開きます。ファセット検索のリージョンで動的アクションの作成を実行します。
作成した動的アクションの名前は任意ですが、ここでは検索結果の表示としています。タイミングのイベントはファセット変更[ファセット検索]、選択タイプはリージョン、リージョンは検索を選択します。
クライアント側の条件として、タイプにJavaScript式を選択し、JavaScript式に以下を指定します。
apex.item("P2_SEARCH").getValue() != ""
検索ボックスのファセット名がP2_SEARCHなので、それをapex.itemに渡しています。そのファセットの値が空文字列""でなければ、Trueアクションを実行します。
Trueアクションとして、表示を選択します。影響を受ける要素の選択タイプにリージョンを選び、リージョンとして、検索結果のリージョンである検索結果を選択します。ページが開いた時にも評価されるように、初期化時に実行はONにします。
リージョンの表示を行うアクションを作成したので、反対に非表示にするアクションを作成します。表示のアクション上でコンテキスト・メニューを表示させ、その中から反対のアクションの作成を実行します。
検索結果のリージョンを非表示するFalseアクションが作成されます。
以上で今回の実装は完了です。作成したアプリケーションを実行すると、最初のGIF動画のような動作を確認することができます。
今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/showfacetsearchregion.sql
Oracle APEXのアプリケーション開発の参考になれば幸いです
完