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動作タイプとしてメニューを選択します。


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

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


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

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


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

設定タイプ設定静的割当てを選択し、として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のアプリケーション作成の参考になれば幸いです。