2026年6月18日木曜日

APEX 26.1で追加されたボタンによるメニューを実装する

Oracle APEX 26.1ではボタンの動作として2つのタイプが設定されました。標準とメニューです。


標準はボタンをクリックしたときに、設定したアクションを実行します。これは26.1までのボタンの動作です。タイプとしてメニューを選択すると、ボタンにエントリとして作成されたメニューを表示します。

26.1までは、このような動作をするボタンは、メニュー・ポップアップやメニュー・ウィジェットを使って実装していました。以下の2本の記事で、メニューの実装を紹介しています。

記事1:メニュー・ポップアップから任意の処理を呼び出す

以下のGIF動画は、メニューをAPEX 26.1の動作のタイプがメニューのボタンで実装した動作です。動作自体は、それまでの実装とほとんど変わりません(メニュー・ウィジェットの実装では、選択されたエントリにマークを付けたり、メニュー・エントリを動的に生成することができます)。


オラクル社のToufiq Mohammedさんが、公式ブログの記事「Trigger Actions Bring Declarative Interactivity to Oracle APEX」の中(Buttons Now Support Declarative Menus)で、このメニューについて紹介されています。この記事自体は、主にAPEX 26.1で追加されたトリガー・アクションについて解説しています。記事中でトリガー・アクションでは(動的アクションとは異なり)、デフォルトで2重クリックが発生しないように対応済みと紹介されています。

以前の記事を読み返しましたが、メニュー・ポップアップとメニュー・ウィジェットの双方とも、手の込んだ実装になっていると感じました。

以下より、APEX 26.1でのメニューの実装方法について紹介します。今までの方法とは異なり、宣言的に実装できます。

ボタンSELECT_JOBの動作のタイプとしてメニューを選択します。


タイプにメニューを選択すると、ボタンの下にノードとしてメニューが現れます。

その上でコンテキスト・メニューを表示し、メニューの作成を実行します。


メニューとしてANALYST、CLERK、SALESMAN、MANAGER、PRESIDENTを作成します。レポートの表示を絞り込む条件として、これらのメニューを選択します。

メニューの動作のタイプとしてトリガー・アクションを選択します。


トリガー・アクションとして値の設定を選びます。

設定のタイプの設定に静的割当てを選択し、値としてANALYST(メニュー名に合わせます)を設定します。

この値の設定先となるコンポーネントを影響を受ける要素に設定します。選択タイプにアイテムを選び、アイテムとしてP4_JOBを設定します。この設定により、このメニューを選択したときにアイテムP4_JOBに値ANALYSTが設定されます。

検索条件の一部であるP4_JOBの値が変更されたときにレポートEmployeesがリフレッシュされるように、変更イベントの禁止はオフにします。


ページ・アイテムP4_JOBに動的アクションを作成します。タイミングのイベントは変更です。


動的アクションのTrueアクションとしてリフレッシュを選択します。影響を受ける要素の選択タイプにリージョンを選び、リージョンとしてEmployeesを設定します。

以上で、ボタンSELECT_JOBのメニューのエントリが選ばれたときに、ページ・アイテムP4_JOBに値が設定され、そのページ・アイテムの値の変更をトリガーとして、リージョンEmployeesの表示が更新されるようになりました。

JavaScriptによるコーディングはすべて削除しています。


APEX 26.1で追加された機能のひとつ、APEXlangビューを実行してJavaScriptのコードがページに含まれていないことを確認します。


APEXlangではコードは```で囲まれますが、APEXlangで出力したページにはJavaScriptに限らず、コードが含まれていないことが確認できます。


APEX 26.1ではメニューの作成が宣言的になり、簡単に実装できるようになりました。

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

以前のメニューの実装も含めた、APEX 26.1のメニューの実装例を以下にエクスポートしました。


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

完