2024年5月30日木曜日

サンプル・アプリSample Treesのapex_util.prepare_urlをapex_page.get_urlに置き換える

ツリー・リージョンの実装サンプルとしてSample Treesが提供されています。このアプリケーションのツリー・リージョンですが、ソースとなるSELECT文にapex_util.prepare_urlが含まれています。

現行のAPEXでは、APEX_UTIL.PREPARE_URLの使用は推奨されていません。代わりにAPEX_PAGE.GET_URLを使うように案内されています。


APEX_UTIL.PREPARE_URLは引数としてURLを受け取り、それにチェックサムを加えます。一般にAPEX_UTIL.PREPARE_URLには、f?p URL構文によるURLを与えます。

Oracle APEX App Builder User's Guide

APEX_PAGE.GET_URLの呼び出しでは、アプリケーションID、ページ番号、URLに含めるアイテム名、その値などを、それぞれ引数として指定します。そのため、URL構文について考える必要はありません。

Sample Treesのツリー・リージョンのソースは、APEX_PAGE.GET_URLを使って以下のように置き換えることができます。

Sample Treesでは、ノードのタイプに依存して開く編集フォームを切り替えるために、ソースのSELECT文でAPEX_PAGE.GET_URLを呼び出しています。

ITEM_TYPEPであればcreate-edit-projectのフォーム、Tであればcreate-edit-tasksのフォーム、Sであればmodify-subtask-informationに遷移します。

一般的にAPEX_PAGE.GET_URLの引数と、ターゲットをクリックすると開くリンク・ビルダーの設定項目は1対1で対応しています。

ツリー・リージョンの場合、属性設定リンクでノードをクリックしたときに遷移する宛先を設定できます。


リンク・ビルダーの設定項目は、APEX_PAGE.GET_URLの引数に以下のように対応します。アンカーは、APEX_PAGE.GET_URLに対応する引数はありません(コードからは、生成されたURLに文字列としてアンカーを追加できるため)。


対話モード・レポートなどのレポートの場合、アイテム(引数p_valuesに与える)にレポートの列の値を割り当てることができます。Sample Treesのソースがレポートのソースだったと仮定すると、検索結果に含まれる列IDSTATUS#ID##STATUS#として参照することができます。

しかし、ツリー・リージョンの場合はレポートの表示とは異なり、レポートとして参照できる列はありません。そのため、p_valuesに渡す値は、ソースとなるSELECT文で指定する必要があります。

また、P、T、SといったITEM_TYPEの種類によって、ターゲットとなるURLだけではなく、p_valuesの値も変わっています。

Pの場合は、P3_SELECTED_NODEidP7_PROJ_IDidが渡されています。Tの場合は、P3_SELECTED_NODEidP9_PROJ_IDproj_idP9_TASK_IDtask_idSの場合はP3_SELECTED_NODEidP10_PROJ_IDproj_idP10_ROWIDROWIDが渡されています。

このような切り替えは、宣言的なターゲットの設定ではできません。

今回の記事は以上になります。

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