2022年8月23日火曜日

影響を受ける要素に設定された数値の合計を計算する

 動的アクションのアクションには、影響を受ける要素というプロパティがあります。影響を受ける要素に複数のページ・アイテムを設定し、そのページ・アイテムが保持している値の合計を計算してみます。

ページの構成は以下になります。

ページ・アイテムP1_ARG_1P1_ARG_2P1_ARG_3P1_SUMすべて、タイプ数値フィールドです。合計を計算するボタンB_CALCを作成し、そのボタンをクリックしたときに動作するアクションとして、以下のJavaScriptを実行します。

// 影響を受ける要素として設定されているページ・アイテムの値を数値として、すべて配列に取り出す。
let args = this.affectedElements.toArray().map( elem => Number(elem.value) );
// 合計を計算する。
const sum = args.reduce(
    ( previousValue, currentValue ) => previousValue + currentValue,
    0
);
// 合計をページ・アイテムに設定する。
apex.items.P1_SUM.setValue(sum);

このとき、TRUEアクションであるJavaScriptコードの実行影響を受ける要素として、選択タイプアイテムアイテムとしてP1_ARG_1P1_ARG_2P1_ARG_3を指定します。


TRUEアクション影響を受ける要素は、アクション値の設定の場合は、値が設定されるページ・アイテムを指定します。また、リフレッシュの場合は、リフレッシュされるリージョンを指定します。英語ではAffected Elementsなので、影響を受ける要素と翻訳されていますが、実際はthis.affectedElementsに渡される要素というだけで、どのように影響を受けるかはコードに依存します。JavaScriptでコードを書く場合、this.affectedElementsをどのように扱うかは、コード中で決めることができます。

今回のように、必ずしもページ・アイテムP1_SUM影響を受ける要素として指定する必要はなく、影響を受ける要素JavaScriptのコードが書きやすくなるように指定できます

以上です。

簡単ですが今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-affected-elements.zip

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