2024年10月4日金曜日

APEXアプリのページ上にある外部リンクのクリック数を数える

Oracle APEXでは、ナビゲーション・メニューやボタンに設定した外部リンクをクリックした数を数えることができます。この機能はOracle APEXに含まれているプロシージャAPEX_UTIL.COUNT_CLICKにて実装されています。

Oracle APEXがHTMLDBという名称だったころから利用できる機能ですが、あまり使っているという話を聞いたことがありません。使い方の分からない機能は使われないですから、以下より利用方法について簡単にまとめてみます。

これから作成するAPEXアプリケーションに、以下の4つのURLを開く外部リンクを埋め込むことにします。
  • https://aws.amazon.com
  • https://cloud.oracle.com
  • https://cloud.google.com
  • https://azure.microsoft.com
クリック数をカウントするURLは、Oracle APEXの管理サービスより認可済URLとして設定されている必要があります。

Oracle APEXの管理サービスにサインインし、インスタンスの管理に含まれるセキュリティを開きます。


認可済URLのタブを開きます。認可済URLの作成をクリックし、上記の4つのURLを登録します。

外部リンクのクリック数のカウントはプロシージャAPEX_UTIL.COUNT_CLICKを呼び出すことにより実施されます。このときクリックして開くURLを引数p_urlに渡します。認可済URLとして設定されていないURLが引数p_urlに渡されると、APEX_UTIL.COUNT_CLICKはエラーとなります。


APEX_UTIL.COUNT_CLICKが呼び出された履歴は、ビューAPEX_WORKSPACE_CLICKSから確認することができます。

以下より、ビューAPEX_WORKSPACE_CLICKSを一覧するアプリケーションを作成します。同じアプリケーションに外部リンクを埋め込みます。

空のAPEXアプリケーションを作成します。名前Sample Count Clickとします。


アプリケーションが作成されたら、ページ・デザイナホーム・ページを開き、対話モード・レポートのリージョンを作成します。

識別名前APEX_WORKSPACE_CLICKSタイプ対話モード・レポートソース表名APEX_WORKSPACE_CLICKSを設定します。


レポートに含まれる列CLICKDATEDATE型です。DATE型はデフォルトで日付だけが表示されます。列の外観書式マスクに設定することもできますが、今回はこのアプリケーションでDATE型を表示する場合は必ず時刻を含めるように、アプリケーション定義に設定します。

アプリケーション定義グローバリゼーションを開きます。

アプリケーション日付書式DS TSとし、変更の適用をクリックします。


以上でアプリケーションを実行します。以下では、すでに外部URLをクリックした履歴があるためレポートの行が表示されています。通常は行が表示されないはずです。


ナビゲーション・リストから外部リンクを開く場合は、設定だけでリンクのクリックを記録できます。

共有コンポーネントリストナビゲーション・メニューを開きます。

エントリの作成をクリックし、認可済URLとして登録したURLをターゲットとしたエントリを作成します。


最初にAWSのリスト・エントリを作成します。

リスト・エントリ・ラベルAWSターゲット・タイプURLURLターゲットhttps://aws.amazon.comとします。

リスト・エントリの設定にクリック・カウントがあります。クリックをカウントはいとし、クリック・カウント・カテゴリAWSを設定します。

以上で、リスト・エントリの作成をクリックします。


リスト・エントリとしてAWSが追加されます。


同様にして、ORACLEGOOGLEMICROSOFTリスト・エントリとして作成します。それぞれの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も作成します。

最終的な画面は以下のようになります。ボタンの表示幅を均等にするため、テンプレート・オプションWidthStretchにしています。


以上でアプリケーションの作成は完了です。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-count-click.zip

クリック履歴はAPEXのスキーマ以下に保存されています。これはアクセス・ログなどと同様に定期的なパージの対象となっています。

APEXの管理サービスインスタンスの管理ログ間隔の管理に含まれる、外部アクセス・カウント・ログにより保存期間が決められています。


今回の記事は以上になります。

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