元情報:札幌市ヒグマ出没情報
作成したアプリケーションは以下のように動作します。
以下よりアプリケーションの作り方を紹介します。
最初に熊出没情報を保存する表を作成します。表BEAR_HTML_DATAは、札幌市ヒグマ出没情報のページをそのままHTMLとして保存します。表BEAR_SIGHTINGSに、Webページから取り出した出没情報を保存します。
クイックSQLの以下のモデルより、表BEAR_HTML_DATAとBEAR_SIGHTINGSを作成します。
SQLの生成、SQLスクリプトを保存、レビューおよび実行を順次実施します。
実行をクリックします。
即時実行します。
表BEAR_HTML_DATAとBEAR_SIGHTINGSが作成されました。
札幌市ヒグマ出没情報のWebページを読み取り、表BEAR_SIGHTINGSに出没情報として保存します。
Webページを表BEAR_HTML_DATAに文字情報として保存します。以下のSQLを実行します。複数回実行すると、列NAMEがSAPPOROである行が複数保存されます。この後の作業で、列NAMEがSAPPOROとなっている行は1行だけ、という前提で書かれてるコードがあるので注意してください。
Webページが、丸ごと列HTMLにCLOBとして保存されます。
ヒグマ出没情報のWebページに含まれるHTMLの表データをパースし、行と列のデータをして返すパイプライン表関数bear_sapporo_parse_html_tableを作成します。
SQLワークショップのSQLスクリプトで、以下のスクリプトを実行します。確認画面が開いたら即時実行します。
ヒグマ出没情報の内容をファセット検索のファセットとして使えるように、JSON配列に変換するファンクションbear_get_sighting_attrsを作成します。
以下のINSERT文を実行し、ヒグマ出没情報のWebページの情報を表BEAR_SIGHTINGSに投入します。
2023年10月27日の実行では、190行のデータが表BEAR_SIGHTINGSに挿入されました。
表やデータの準備は以上で完了です。
APEXアプリケーションの作成を始めます。
アプリケーション作成ウィザードを起動します。アプリケーションの名前は熊出没情報とします。
ホーム・ページを削除し、代わりにファセット検索のページを追加します。
ファセット検索のページは、ページ名を熊出没情報、レポートを選択し、表としてBEAR_SIGHTINGSを指定します。
アプリケーションが作成されます。
ページ・デザイナでページ番号1のファセット検索のページを開きます。
クラシック・レポートのリージョンBear Sightingsを選択します。
ソースのタイプをSQL問合せに変更し、SQL問合せに以下を記述します。ファセットとして使用するため、列ADDRESSから区の名前を抜き出しています。
また、詳細の静的IDとしてbear_sightingsを設定します。
列SIGHING_NOを選択し、ヘッダーをNoに変更します。
列SIGHTING_DATEを選択し、ヘッダーを日時、外観の書式マスクをDL TSに変更します。
列ADDRESSを選択し、ヘッダーを場所に変更します。
列NOTEを選択し、ヘッダーを内容に変更します。
ファセットのP1_NOTEとP1_SIGHTING_NOを削除します。
ファセット上でコンテキスト・メニューを開き、ファセットの作成を実行します。
作成されたファセットを選択します。最初に区のファセットを作ります。
識別の名前はP1_WARDとします。タイプはチェック・ボックス・グループです。ラベルは区になります。LOVのタイプとして個別値を選択します。
もうひとつ同じ手順でファセットを作成します。
識別の名前はP1_ATTRIBUTES、タイプはチェック・ボックス・グループを選択します。LOVのタイプに個別値を指定します。
プロパティ・エディタを下の方にスクロールさせます。
複数の値のタイプにJSON配列を選択し、フィルタの結合はAND (論理積)にします。
以上で、ファセット検索とクラシック・レポートの部分は完成です。アプリケーションを実行して、これまでの作業結果を確認します。
ファセット検索が適用されたクラシック・レポートをマップのソースとして扱うために、パイプライン表関数facet_report_keysを作成します。
SQLスクリプトを使って実行します。
ページ・デザイナでの作業に戻ります。
リージョンボタン・バーの上でコンテキスト・メニューを表示させ、下にリージョンを作成を実行します。
新規に作成されたリージョンを選択します。
識別のタイトルを地図とし、タイプとしてマップを選択します。外観のテンプレートにBlank with Attributesを選択します。
リージョン地図を選択し、プロパティ・エディタの属性タブを開きます。
初期位置およびズームとして札幌市の中心を指定します。タイプとして静的値を選択し、経度に141.3543、緯度に43.062、ズーム・レベルに9を設定します。
今回はレイヤーが1つだけなので、凡例の表示はオフにします。
右ペインのレンダリング・ビューで、リージョン地図にひとつだけあるレイヤーを選択します。
識別の名前を出没場所、レイヤー・タイプとしてポイントを選択します。ソースのタイプにSQL問合せを選択し、SQL問合せとして以下を記述します。
列INFOとして情報ウィンドウに表示するデータを定義していますが、これは情報ウィンドウの拡張フォーマットが思ったように動かないためのワークアラウンドです。
情報ウィンドウの拡張フォーマットをオンにし、HTML式として&INFO.を設定しています。原因は不明ですが、&INFO.以外の列をHTML式に含めても置換されません。情報ウィンドウだけでなく、ツールチップも同じ症状です。
クラシック・レポートがリフレッシュした後にマップもリフレッシュするよう、動的アクションを作成します。
リージョンBear Sightings上でコンテキスト・メニューを表示させ、動的アクションの作成を実行します。
作成された動的アクションを選択します。
識別の名前は地図をリフレッシュとします。タイミングのイベントはデフォルトでリフレッシュ後、選択タイプはリージョン、リージョンはBear Sightingsになります。
TRUEアクションを選択します。
識別のアクションとしてリフレッシュを選択し、影響を受ける要素の選択タイプにリージョン、リージョンに地図を選択します。
以上で、熊出没情報のアプリケーションは完成です。アプリケーションを実行すると、記事の先頭のGIF動画のように動作します。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/bear-sightings-with-facet-and-map.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完