2022年4月7日木曜日

オラクルのマニュアルを検索するアプリを作る - 検索履歴の取得

 サンプルというには少々簡単すぎる気もしたので、先日作成したマニュアルを検索するアプリに、検索履歴を保存するコードを追加してみました。

最初に検索履歴を保存する表MDSH_HISTORYを作成します。クイックSQLの以下のモデルを使います。

# prefix: mdsh
history
    site_url vc400
    term     vc200
    search_date date /default sysdate

ホーム・ページにAjaxコールバックとしてプロセスRECORDを作成します。

識別名前RECORDPL/SQLコードとして以下のINSERT文を記述します。
insert into mdsh_history
(
    site_url
    , term
)
values
(
    apex_application.g_x01
    , apex_application.g_x02
);
sys.htp.p('{}');

ページ・プロパティJavaScriptファンクションおよびグローバル変数の宣言に記述しているコードに、apex.server.processを使ったAjaxコールバックRECORDの呼び出しを追加します。

// サイトとして設定されているドキュメントを検索する。
var elem = document.getElementById("searchDoc");
elem.addEventListener('keypress', do_search);
// Enterを押したときの列のサイトを検索する。
function do_search(e) {
  	if (e.keyCode === 13) {
        let ie = e.srcElement;
        let idx = ie.getAttribute("data-term-index");
        let term = ie.value; 
        let site_url = "site:" + document.querySelector("#site_url-" + idx).value + " ";
        let searchUrl = "https://www.google.com/search?q=" + escape(site_url) + term;
        console.log(searchUrl);
        // 検索機歴を保存する -- 追加する行。
        const result = apex.server.process(
            "RECORD",
            {
                x01: site_url,
                x02: term
            }
        );
        window.open(searchUrl, "_blank");
	} 
	return false;
}

以上で完成です。

機能を追加したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/my-document-search-wh.sql

Ajaxコールバックとapex.server.processの使い方のサンプルとして作ってみました。x01x02の使い方などは、サンプルがないと分かりにくいかと思います。

Oracle APEXのアプリケーション作成の参考になれば幸いです。