2022年12月1日木曜日

actionインターフェースを実装しているファンクションの引数を調べる

 actionインターフェースを実装しているファンクションの引数は、event、element、argsの3つです。実際に渡ってくる値を確認するAPEXアプリケーションを作ってみました。

サンプル・データセットのEMP/DEPTに含まれる表EMPをソースとした対話モード・レポートを作成します。

ひとつは列NAMEをリンクとしてaction、copy-by-linkを呼び出します。もうひとつはボタンをクリックしてaction、copy-by-buttonを呼び出します。


それぞれのactionのコードは以下になります。

ページ・プロパティのJavaScriptページ・ロード時に実行に記述します。

列ENAMEのリンクのクリックでactionのcopy-by-linkを呼び出すため、列のタイプリンクにし、リンクターゲットを以下に設定しています。

#action$copy-by-link?ename=#ENAME#

引数enameに#ENAME#を渡していますが、copy-by-linkではargsは参照せずelementからENAMEの値を取得しています。


ボタンのクリックでactionのcopy-by-buttonを呼び出す場合は、列の書式HTML式に以下の記述を行っています。カスタム属性のdata-actionを使用しています。

#ENAME# <button data-action="#action$copy-by-button?ename=#ENAME#" type="button" title="Copy to Clipboard" class="t-Button t-Button--noLabel t-Button--icon t-Button--small t-Button--noUI u-pullRight"><span class="t-Icon fa fa-synonym"></span></button>


以上の設定で、actionが呼び出された時に、画面右に引数として渡されたevent、element、argsが文字列として表示されます。

eventとしてactionの呼び出しの契機となったブラウザのイベント、elementは、そのイベントが発生したHTML要素が渡されると思っていたので、大体、想定通りの結果が確認できました。

一点、想定外だったのはボタンを押した時のHTML要素です。

ボタンの真ん中にあるアイコンをクリックすると、elementとしてアイコンであるspan要素が渡されます。


ボタンの境界あたりをクリックすると、elementとしてbutton要素が渡されます。


ボタンからactionを呼ぶ場合はelementがbutton要素になるとは限らないようです。

今回の検証に使用したアプリーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/action-interface-cheat-sheet.zip

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