2024年1月30日火曜日

アプリケーションにサインインした直後に必ずダイアログを表示して確認する

APEXアプリケーションにサインインした直後に、必ずダイアログを表示してユーザーに確認を求める方法を考えてみました。以下のようにダイアログを表示します。


アプリケーションにディープ・リンク有効になっているページが含まれていると、サインインした直後にそのディープ・リンクが有効になっているページが開きます。サインイン直後に必ずホーム・ページが開くとは限らないため、すべてのページでダイアログを開く設定が必要になります。

Oracle APEXのアプリケーションにはグローバル・ページ(ページ番号)が含まれています。グローバル・ページに作成されたリージョンやページ・アイテムはすべてのページで共有されます。今回は、グローバル・ページにダイアログを開く動的アクションを作成することにします。

ダイアログ上のボタンはい、またはいいえをクリックした結果はアプリケーション・アイテムに保存します。

アプリケーション・アイテムとしてG_CONFIRMEDを作成します。


ダイアログを開く処理をグローバル・ページに実装します。

ページ・デザイナグローバル・ページを開きます。


左ペインで動的アクション・ビューを開き、ページのロード時に実行される動的アクションを作成します。

サーバー側の条件タイプとしてファンクション本体を選択し、PL/SQLファンクション本体に以下を記述します。ログイン・ページでは動的アクションを実行せず(正確には生成されるページに動的アクションのJavaScriptコードを含めない)、また、G_CONFIRMEDに値が設定済みの場合も動的アクションを実行しません。
if :APP_PAGE_ID in (9999) then
    return false; -- ログイン・ページを除く。
end if;
if :G_CONFIRMED is null then
    return true; -- 初回アクセスであればダイアログを表示。
end if;
return false;


最初に実行されるTRUEアクションでは、サーバー側のコードを実行して、アプリケーション・アイテムG_CONFIRMEDNを設定します。

:G_CONFIRMED := 'N';


続けて、ダイアログを開くTRUEアクションとして確認を作成します。


アクション確認によって開かれたダイアログで、確認ボタン(今回は確認ラベルはいにしているので、はいのボタン)をクリックすると、後続のTRUEアクションが実行されます。

後続のTRUEアクションでアプリケーション・アイテムG_CONFIRMEDにYを設定します。


以上で、アプリケーションへの初回アクセス時に限りダイアログを表示することはできました。

TRUEアクション確認による実装の場合、確認ボタンを押したときに、後続のTRUEアクションとして行いたい処理を実装することができます。しかし、取消ボタンを押したときは何もしないだけで、取消ボタンを押した時に行いたい処理を実装することはできません。

取消ボタンを押した時に行いたい処理がある場合は、JavaScript APIのapex.message.confirmを呼び出す必要があります。

同じ処理をJavaScriptコードで実装してみます。

アプリケーション・プロセスとして、アプリケーション・アイテムG_CONFIRMEDを更新する処理を実装します。

プロセス・ポイントAjaxコールバック名前UPDATE_G_CONFIRMEDとします。ソースコードに以下を記述します。
:G_CONFIRMED := apex_application.g_x01;
htp.p('{}');


TRUEアクションJavaScriptコードの実行のみで実装します。設定コードに以下を記述します。apex.message.confirmを呼び出す場合、取消ボタンを押した際の実行される処理も記述できます。



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

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