Oracle APEXがHTMLDBという名称だったころから利用できる機能ですが、あまり使っているという話を聞いたことがありません。使い方の分からない機能は使われないですから、以下より利用方法について簡単にまとめてみます。
これから作成するAPEXアプリケーションに、以下の4つのURLを開く外部リンクを埋め込むことにします。
- https://aws.amazon.com
- https://cloud.oracle.com
- https://cloud.google.com
- https://azure.microsoft.com
Oracle APEXの管理サービスにサインインし、インスタンスの管理に含まれるセキュリティを開きます。
認可済URLのタブを開きます。認可済URLの作成をクリックし、上記の4つのURLを登録します。
外部リンクのクリック数のカウントはプロシージャAPEX_UTIL.COUNT_CLICKを呼び出すことにより実施されます。このときクリックして開くURLを引数p_urlに渡します。認可済URLとして設定されていないURLが引数p_urlに渡されると、APEX_UTIL.COUNT_CLICKはエラーとなります。
以下より、ビューAPEX_WORKSPACE_CLICKSを一覧するアプリケーションを作成します。同じアプリケーションに外部リンクを埋め込みます。
空のAPEXアプリケーションを作成します。名前はSample Count Clickとします。
識別の名前はAPEX_WORKSPACE_CLICKS、タイプは対話モード・レポート、ソースの表名にAPEX_WORKSPACE_CLICKSを設定します。
レポートに含まれる列CLICKDATEはDATE型です。DATE型はデフォルトで日付だけが表示されます。列の外観の書式マスクに設定することもできますが、今回はこのアプリケーションでDATE型を表示する場合は必ず時刻を含めるように、アプリケーション定義に設定します。
アプリケーション定義のグローバリゼーションを開きます。
アプリケーション日付書式をDS TSとし、変更の適用をクリックします。
以上でアプリケーションを実行します。以下では、すでに外部URLをクリックした履歴があるためレポートの行が表示されています。通常は行が表示されないはずです。
共有コンポーネントのリストのナビゲーション・メニューを開きます。
エントリの作成をクリックし、認可済URLとして登録したURLをターゲットとしたエントリを作成します。
最初にAWSのリスト・エントリを作成します。
リスト・エントリ・ラベルはAWS、ターゲット・タイプはURL、URLターゲットはhttps://aws.amazon.comとします。
リスト・エントリの設定にクリック・カウントがあります。クリックをカウントをはいとし、クリック・カウント・カテゴリにAWSを設定します。
以上で、リスト・エントリの作成をクリックします。
リスト・エントリとしてAWSが追加されます。
同様にして、ORACLE、GOOGLE、MICROSOFTをリスト・エントリとして作成します。それぞれのURLターゲットは認可済URLとして作成済みのURLを指定します。クリック・カウント・カテゴリにはリスト・エントリ・ラベルと同じ文字列を設定します。
4つのエントリを作成すると、以下のようになります。
アプリケーションに戻りページをリフレッシュすると、ナビゲーション・メニューに追加したエントリAWS、ORACLE、GOOGLE、MICROSOFTが現れます。
ナビゲーション・メニューをクリックして、履歴が記録されることを確認します。
AWSをクリックするとAWSへのリンクが開きます。ブラウザの戻るボタンを押して、APEXアプリケーションに戻ります。
外部リンクをクリックした履歴が、ビューAPEX_WORKSPACE_CLICKSから参照できます。列CLICKDATEの時刻は、データベース・サーバーのタイムゾーンでの時刻になります。
その他のORACLE、GOOGLE、MICROSOFTもクリックしてみます。
APIの名前がAPEX_UTIL.COUNT_CLICKなので、クリック数だけを数えてるように思われがちですが、実際にはクリックの履歴が保存されています。
ナビゲーション・メニューではクリック・カウントを有効にすることにより、クリックの履歴が保存できました。
ボタンをクリックして外部リンクを開く場合などは、APEX_UTIL.COUNT_CLICKを呼び出すようにURLを記述する必要があります。APEX_UTIL.COUNT_CLICKは別名Zで呼び出すことができます。そのため、URLとしては以下のように記述します。
z?p_url=<URLターゲット>&p_cat=<カテゴリ>&p_user=&APP_USER.&p_workspace=&WORKSPACE_ID.
ボタンをクリックしてURLを開く場合、動作のアクションはURLにリダイレクトを選択します。ターゲットのURLとして、リダイレクトするページのURLを設定します。
https://cloud.oracle.comを開く場合、クリック履歴が不要な場合のターゲットは以下になります。
https://cloud.oracle.com
クリック履歴を保存する場合は、ターゲットを以下に置き換えます。
z?p_url=https://cloud.oracle.com&p_cat=ORACLE&p_user=&APP_USER.&p_workspace=&WORKSPACE_ID.
クリック履歴を取らない場合は、このボタンをクリックするとブラウザはhttps://cloud.oracle.comのページを直接開きます。
クリック履歴を取る場合は、ブラウザは一旦、(ORDS経由で)APEXが実行されているデータベース・サーバのZ(実体はプロシージャAPEX_UTIL.COUNT_CLICKS)を呼び出し、Zのレスポンスとしてhttps://cloud.oracle.comへのリダイレクトがブラウザに要求される、という処理フローになります。
ボタンORACLEと同様に、GOOGLE、AWS、MICROSOFTも作成します。
最終的な画面は以下のようになります。ボタンの表示幅を均等にするため、テンプレート・オプションのWidthをStretchにしています。
以上でアプリケーションの作成は完了です。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-count-click.zip
クリック履歴はAPEXのスキーマ以下に保存されています。これはアクセス・ログなどと同様に定期的なパージの対象となっています。
APEXの管理サービスのインスタンスの管理のログ間隔の管理に含まれる、外部アクセス・カウント・ログにより保存期間が決められています。
今回の記事は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完