現行の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_TYPEがPであれば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のソースがレポートのソースだったと仮定すると、検索結果に含まれる列IDやSTATUSは#ID#、#STATUS#として参照することができます。
しかし、ツリー・リージョンの場合はレポートの表示とは異なり、レポートとして参照できる列はありません。そのため、p_valuesに渡す値は、ソースとなるSELECT文で指定する必要があります。
また、P、T、SといったITEM_TYPEの種類によって、ターゲットとなるURLだけではなく、p_valuesの値も変わっています。
Pの場合は、P3_SELECTED_NODEにid、P7_PROJ_IDにidが渡されています。Tの場合は、P3_SELECTED_NODEにid、P9_PROJ_IDにproj_id、P9_TASK_IDにtask_id、Sの場合はP3_SELECTED_NODEにid、P10_PROJ_IDにproj_id、P10_ROWIDにROWIDが渡されています。
このような切り替えは、宣言的なターゲットの設定ではできません。
今回の記事は以上になります。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完