APEXでアプリを作っていると、オラクル・データベースのSQLリファレンスやPL/SQLリファレンス、APEXのリファレンスをよく検索するのですが、そのまま検索すると古いバージョンのマニュアルがヒットします。
siteを指定すれば限定されるのですが指定が面倒なので、siteに指定したいURLをデータベースに登録して、そのサイトに限定して検索を呼び出すアプリを作ってみました。
https://apex.oracle.com/pls/apex/japancommunity/r/search/
最初に検索対象とするサイトを保持する表MDSH_SITESを作成します。
SQLワークショップのユーティリティのクイックSQLを開き、以下のモデルを記述します。
# prefix: mdsh
sites
site_name vc100 /nn /unique
site_url vc400 /nn /unique
display_order num
SQLの生成、続けてSQLスクリプトを保存、最後にレビューおよび実行を行います。
表が作成されたのちに、アプリケーションの作成を実行します。確認画面が表示されたら、重ねてアプリケーションの実行をクリックします。
アプリケーション作成ウィザードが開きます。アプリケーションの名前は検索とします。表MDSH_SITESへのサイトの登録を管理作業とするため、Sitesのページの編集をクリックします。
詳細をクリックします。管理ページとして設定にチェックを入れ、変更の保存をクリックします。
アプリケーションの作成をクリックします。
処理はすべてホーム・ページに実装します。
ページ・デザイナにてホーム・ページを開きます。
Bodyにリージョンを作成します。
識別の名前を検索、タイプとしてクラシック・レポートを選択します。ソースのタイプをSQL問合せを選択し、SQL問合せに以下を記述します。
APEXのPL/SQL APIのパッケージAPEX_ITEMを使って、レポートに検索する単語を入力するテキスト・フィールドを作成しています。
ファンクションAPEX_ITEM.HIDDENおよびTEXTはHTMLを生成します。レポートに表示される列の値は、デフォルトではエスケープされ、文字列として表示されます。そうではなくHTMLとして解釈されるようにします。列SITE_NAMEもHTMLを記述しています。
列をすべて選択し、セキュリティの特殊文字をエスケープをOFFにします。
JavaScriptのコードよりクラシック・レポートのリージョンを指定するために、詳細の静的IDとしてsearchDocを設定します。
検索する単語を入力してEnterを入力したときに、別画面に検索結果を表示させるJavaScriptのコードを記述します。
ホーム・ページのJavaScriptのファンクションおよびグローバル変数の宣言として、以下のJavaScriptのコードを記述します。
列SITE_URLはデータとしては必要ですが(レポート列として非表示にできない)、画面には表示させたくありません。
CSSのインラインに以下を記述し、列SITE_URLを非表示にします。
検索に関する動作の実行は、以上で完了です。
これ以降は、ブレッドクラムの削除や管理ページの構成など、見栄えの調整になります。これらの作業については説明を割愛します。
今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/my-document-search.sql
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完