2022年6月22日水曜日

ナビゲーション・メニューを動的に生成する

 標準的なOracle APEXアプリケーションでは、画面左にナビゲーション・メニューが表示されます。このナビゲーション・メニューは、SSELECT文の検索結果より動的に生成することができます。

以下は実装例です。サンプル・データセットのEMP/DEPTに含まれる表EMPとDEPTから、ナビゲーション・メニューを生成しています。


ナビゲーション・メニューは、共有コンポーネントのリストとして作成されます。タイプが動的であれば、SQLで実装されたリストになります。


ユーザー・インターフェースのナビゲーション・メニューとして、共有コンポーネントのリストを選択します。以下では、動的ナビゲーションをナビゲーション・メニュー・リストとして設定しています。


リストである動的ナビゲーションのSELECT文は以下になります。動的リストに関するマニュアルの説明は、こちらになります。

以下より、実行例になっているアプリケーションの作成手順を紹介します。

サンプル・データセットのEMP/DEPTがインストール済みで、表EMP、DEPTおよびビューEMP_DEPT_Vが利用可能になっているのが前提条件です。

アプリケーション作成ウィザードを起動します。アプリケーションの名前は動的ナビゲーション・メニューとします。

ホームの編集を開いて、ホーム・ページを削除します。


クラシック・レポートのページを追加します。

ページの追加をクリックします。


追加ページを開いて、クラシック・レポートを選択します。


ページ名は従業員一覧、表またはビューとしてEMP_DEPT_Vを選択します。レポートだけで編集はしないため、フォームを含めるはチェックしません。

ページの追加を実行します。


ページ従業員一覧だけを含むアプリケーションを作成します。

アプリケーションの作成を実行します。


アプリケーションが作成されます。


ナビゲーション・メニューは、アプリケーション全体で使用されます。そのため、検索条件には(ページ・アイテムではなく)アプリケーション・アイテムを使用します。

共有コンポーネントのアプリケーション・アイテムを開きます。


作成済みのアプリケーション・アイテムが一覧されます。作成をクリックします。


作成するアプリケーション・アイテムの名前をG_DNAMEとします。有効範囲はアプリケーション、セキュリティのセッション・ステート保護として、チェックサムが必要 - セッション・レベルを選択します。

ナビゲーション・メニューのリンクにアプリケーション・アイテムG_DNAMEに設定する値を含めます。そのため、セッション・ステート保護を制限付き - ブラウザから設定不可とすると、値が設定できません。

以上で、アプリケーション・アイテムの作成を実行します。


同様の手順にて、アプリケーション・アイテムG_JOBを作成します。

2つのアプリケーション・アイテムG_DNAMEとG_JOBが作成されます。


ホーム・ページを開き、クラシック・レポートの検索条件に使用するページ・アイテムP1_DNAMEおよびP1_JOBを作成します。双方とも、アプリケーション・アイテムをソースとします。

クラシック・レポートのリージョンに、ページ・アイテムを作成します。

識別の名前をP1_DNAME、タイプは非表示とします。ソースのタイプにアイテムを選択し、アイテムとしてG_DNAMEを指定します。セッション・ステートの保持にリクエストごと(メモリーのみ)を選択します。


同様の手順でページ・アイテムP1_JOBを作成します。ソースとなるアプリケーション・アイテムはG_JOBです。


クラシック・レポートに、上記の2つのページ・アイテムを使用した検索条件を設定します。ソースのWHERE句に以下を記述します。
(
    :P1_DNAME is null
    or
    :P1_DNAME = dname
)
and
(
    :P1_JOB is null
    or
    :P1_JOB = job
)

最後にナビゲーション・メニューとなるリストを作成します。

共有コンポーネントのリストを開きます。


作成済みのリストが一覧されます。作成をクリックします。


リストの作成は最初からのままにします。次へ進みます。


名前は動的ナビゲーションとし、タイプとして動的を選択します。

次へ進みます。


問合せソース・タイプとしてSQL問合せを選択し、SQL問合せに前出のSQLを記述します。

次へ進みます。


作成するリストはナビゲーションに使います。そのため、リスト・リージョンを作成しますか。として、リスト・リージョンを作成しないを選択します。

作成をクリックします。


リストとして動的ナビゲーションが作成されます。


ユーザー・インターフェースのナビゲーション・メニューのナビゲーション・メニュー・リストを、新たに作成したリスト動的ナビゲーションに置き換えます。

変更の適用をクリックします。


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

アプリケーションを実行すると、記事の先頭のGIF動画のように動作します。

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

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

完