2024年2月8日木曜日

リスト・リージョン上のアイテムをクリックして選択する

リスト・リージョンに表示されているリスト・アイテムをクリックして、そのアイテムが選択されたように見せる実装をしてみました。また、タイプがラジオ・グループのページ・アイテムをボタンで表示し、双方の設定が同期するような実装も加えています。

以下のように動作します。


リスト・リージョンの外観リスト・テンプレートとしてLinks Listを選んでいます。今回の実装はLinks Listのテンプレートを対象した実装になります。


ページにタイプリストのリージョンを作成しています。ソースリストとしてCity Listを選択しています。JavaScriptのコードよりリージョンを参照するため、詳細静的IDCITY_LISTを設定しています。


共有コンポーネントリストに、以下のようにリストCity Listを作成しています。

ターゲットはすべて#action$select-cityを設定しています。この設定により、リストに表示されている要素(都市名)をクリックすると、APEXアクションのselect-cityが呼び出されます。

リストからAPEXアクションを呼び出す設定は、リスト・テンプレートに依存して変わります。今回はLinks Listですが、Menu Popupの場合は以前の記事「メニュー・ポップアップから任意の処理を呼び出す」で紹介した手順になります。


ページ・プロパティJavaScriptページ・ロード時に実行に、APEXアクションの定義を記述します。



選択した都市名を保持するページ・アイテムとしてP1_CITYを作成しています。選択肢の内の1つを選択するため、タイプラジオ・グループを選びます。

ラベルにはCityと設定していますが、外観テンプレートHiddenを選択しているため、ラベルは表示されません。ラベルは表示されませんが、デフォルトではラベルを表示するための領域が取られるため、レイアウトラベル列スパンにします。これでページ・アイテムの値が左端に寄ります。

設定列の数を設定します。都市の数が5つなので、6であれば表示が1行に収まります。

テンプレート・オプションを開き、一般のStretch Form Itemチェックを入れ、詳細Item Group DisplayDisplay as Pill Buttonを選択します。これで、画面の左右いっぱいの幅に、かつ形状がボタンで表示されるようになります。

リストを静的値で設定しているため、ページ・アイテムのLOV静的値で設定します。NULL値の表示オフにします。オンのときは、NULLの選択がラジオ・ボタンの選択肢として追加されます。


ラジオ・グループの選択を変えたときに、リストの選択を変える動的アクションを作成します。動的アクションタイミングイベントは、ページ・アイテムのデフォルトである変更です。


TRUEアクションとして、以下のJavaScriptのコードを実行します。


今回の実装の紹介は以上です。

今回の記事で扱ったAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/select-list-item-on-click.zip

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