actionインターフェースを実装しているファンクションの引数は、event、element、argsの3つです。実際に渡ってくる値を確認するAPEXアプリケーションを作ってみました。
サンプル・データセットのEMP/DEPTに含まれる表EMPをソースとした対話モード・レポートを作成します。
ひとつは列NAMEをリンクとしてaction、copy-by-linkを呼び出します。もうひとつはボタンをクリックしてaction、copy-by-buttonを呼び出します。
apex.actions.add([ | |
{ | |
name: "copy-by-link", | |
action: function( event, element, args ) { | |
$s("P1_EVENT" ,JSON.stringify(event)); | |
$s("P1_ELEMENT",element.outerHTML); | |
$s("P1_ARGS" ,JSON.stringify(args)); | |
// クリップボードにコピー。 | |
navigator.clipboard.writeText(element.textContent); | |
// クリップボードからペースト。 | |
navigator.clipboard.readText().then( | |
(clipText) => { | |
$s("P1_PASTE", clipText); | |
} | |
); | |
} | |
}, | |
{ | |
name: "copy-by-button", | |
action: function( event, element, args ) { | |
$s("P1_EVENT" ,JSON.stringify(event)); | |
$s("P1_ELEMENT",element.outerHTML); | |
$s("P1_ARGS" ,JSON.stringify(args)); | |
// クリップボードにコピー。 | |
navigator.clipboard.writeText(args.ename); | |
// クリップボードからペースト。 | |
navigator.clipboard.readText().then( | |
(clipText) => { | |
$s("P1_PASTE", clipText); | |
} | |
); | |
} | |
} | |
]); |
ページ・プロパティの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>