2025年10月30日木曜日

テキスト・フィールド、ポップアップLOV、1つ選択、複数選択の変更イベントでAPEXアクションを呼び出す

Oracle APEXのボタン、ラジオ・グループ、チェックボックスおよびチェックボックス・グループといったコンポーネントでは、カスタム属性のdata-actionにAPEXアクション名を指定することにより、クリック(ボタン)や変更(ラジオ・グループ、チェックボックス、チェックボックス・グループ)イベントが発生したときに、APEXアクションとして記述したJavaScriptのコードを実行できます。

この設定により動的アクションを作成せずに、静的アプリケーション・ファイルに記述したJavaScriptのコードを直接呼び出すことができます。動的アクションとしてJavaScriptのコードをページに埋め込むと、別々の場所にコードが書かれているので全体としての見通しが悪くなります。また、ページとして生成されるHTMLにJavaScriptのコードがインラインで記述されることになり、セキュリティ面の懸念もあります(Content-Security-Policyの実装が必要)。

そのため、JavaScriptのコードを実行する場合は、可能な限りdata-actionを設定するように方針を決めることもできます。しかし、残念なことにテキスト・フィールドポップアップLOV1つ選択複数選択日付ピッカーといったページ・アイテムは、data-actionの指定に対応していません。

ワークアラウンドとして、テキスト・フィールド、1つ選択、複数選択、日付ピッカーを対象に、カスタム属性data-actionに指定したAPEXアクションを呼び出すようなワークアラウンドを記述してみました。


このスクリプトを静的アプリケーション・ファイルとして導入したAPEXアプリケーションは、以下のように動作します。


APEXアプリケーションとしては動的アクションは作成せず、すべて詳細カスタム属性data-action="APEXアクション名"を設定しています。


実装のテストに使用したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/data-action-for-page-item.zip

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