2021年11月22日月曜日

Oracle APEX 21.2新機能(18) - ポップアップLOVの拡張

 Oracle APEX 21.2より、JavaScript APIのapex.item.setValueを呼び出してポップアップLOVの値を設定したときに、同時にページ・アイテムの表示と追加値も更新されるようになりました。

以下のGIF動画では、最初にポップアップLOVを操作して値を選択しています。その次に動的アクションによって、ポップアップLOVに従業員番号を設定しています。従業員名の表示とジョブの表示も更新されています。


実装について確認してみます。サンプル・データセットEMP/DEPTがインストールされていて、表EMPが存在することを前提とします。

アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。アプリケーションの名前は任意です。


ポップアップLOVで追加値を扱う場合は、共有コンポーネントのLOVが必要です。表EMPを扱うLOVを作成します。共有コンポーネントLOVを開きます。


作成済みのLOVの一覧ページより、作成をクリックします。


LOVの作成最初からを選択し、へ進みます。


LOVの名前LOV_EMPタイプDynamicとします。へ進みます。


ソース・タイプTable表/ビューの名前としてEMP(表)を選択します。へ進みます。


戻り列EMPNO表示列ENAMEとします。作成をクリックします。


共有コンポーネントのLOV、LOV_EMPが作成されます。追加値を扱えるように設定を加えます。LOV_EMPをクリックして編集画面を開きます。


追加表示列列の選択をクリックします。


今回は検証なので、すべての列を追加表示列にします。更新をクリックします。


以上でLOVの設定は完了です。変更の適用をクリックして共有コンポーネントの作業を終了します。


ホーム・ページページ・デザイナで開き、ページ・アイテムを3つ作成します。

最初にポップアップLOVのページ・アイテムP1_EMPNOを作成します。

識別名前P1_EMPNOタイプポップアップLOVです。ラベル従業員とします。追加出力としてJOB:P1_JOBを指定します。LOVタイプ共有コンポーネントLOVは先ほど作成したLOV_EMPを指定します。


追加出力のジョブを保持するページ・アイテムP1_JOBを作成します。

識別名前P1_JOBタイプテキスト・フィールドラベルジョブとします。


動的アクションの引数とする従業員番号を入力するページ・アイテムP1_EMPNO_DAを作成します。

識別名前P1_EMPNO_DAタイプテキスト・フィールドラベル従業員#とします。


ポップアップLOVに値を設定するJavaScriptのコードを、動的アクションとして実行するボタンを作成します。

識別ボタン名B_SETラベル設定とします。動作アクションとして動的アクションで定義を選択します。


動的アクションは、タイミングとしてボタンB_SETクリックした時にTRUEアクションが実行されるように設定します。


TRUEアクションを設定します。識別アクションとしてJavaScriptコードの実行を選択します。コードとして以下を記載します。
apex.item("P1_EMPNO").setValue($v("P1_EMPNO_DA"));

Oracle APEX 21.2からは、apex.item.setValueでポップアップLOVの値を設定すると、画面上の表示および追加値も変更されます。結果として、最初のGIF画面の動作になります。

Oracle APEX 21.2ではapex.itemsというネーム・スペースが追加され、ページ・アイテムの参照が容易になっています。apex.itemsを使用すると上記のコードを、以下に書き換えることができます。
apex.items.P1_EMPNO.setValue(
    apex.items.P1_EMPNO_DA.getValue()
);
Oracle APEX組み込みのJavaScriptのコード・エディタは、apex.items.から続くページ・アイテム名の補完を行うようになっています。


ページ・アイテムから呼び出せるファンクション名も補完してくれます。


apex.items以外にコーディングを容易にするネーム・スペースとして、apex.regionsおよびapex.envが追加されています。

ポップアップLOVの拡張については以上になります。

今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/new212-popup-lov-setvalue.sql

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

追記

apex.item.setValueを呼び出す他にアクション値の設定でも、同様に表示と追加値が設定されます。

設定タイプの設定としてJavaScript Expressionを選択し、JavaScript式としてapex.items.P1_EMPNO_DA.getValue()影響を受ける要素として選択タイプアイテムアイテムP1_EMPNOを選択します。