Oracle APEXのページやORDSのRESTサービスを呼び出す直リンクを作成したい場合があります。APEXアプリケーションが動作しているホスト名やワークスペース名などを文字列として取得する必要があるため、通常はAPEX_UTIL.HOST_URLを呼び出します。
HOST_URLに与える引数p_optionには、NULL(引数なし)、SCRIPT、APEX_PATH、IMGPREがあります。マニュアルにどのような値が返ってくるか説明はあります。しかし、返される値はOracle APEXがどのようにインストールおよび構成されているか依存するため、実際にどのような値が返ってくるか、今ひとつ分かりにくいです。
結局、APEXが動作している環境で呼び出して確認するのが手っ取り早いので、以下のPL/SQLコードを書きました。動的コンテンツのリージョンのソースになります。HOST_URL以外にAPEXワークスペース名、ORDS別名、アプリケーション別名なども印刷しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_clob clob; | |
l_result varchar2(4000); | |
procedure append( | |
p_clob in out clob | |
,p_string in varchar2 | |
,p_bold in boolean default false) | |
as | |
begin | |
if p_bold then | |
p_clob := p_clob || '<p><b>' || p_string || '</b></p>'; | |
else | |
p_clob := p_clob || '<p>' || p_string || '</p>'; | |
end if; | |
end append; | |
begin | |
l_clob := '<p><b>APEXの場合はapex_page.get_urlがあるため、apex_util.host_urlが必要なケースは少ない。</b></p>'; | |
l_result := apex_util.host_url(); | |
append(l_clob, q'~apex_util.host_url()~', true); | |
append(l_clob, l_result); | |
l_result := apex_util.host_url('SCRIPT'); | |
append(l_clob, q'~apex_util.host_url('SCRIPT')~', true); | |
append(l_clob, l_result); | |
l_result := apex_util.host_url('APEX_PATH'); | |
append(l_clob, q'~apex_util.host_url('APEX_PATH')~', true); | |
append(l_clob, l_result); | |
l_result := apex_util.host_url('IMGPRE'); | |
append(l_clob, q'~apex_util.host_url('IMGPRE')~', true); | |
append(l_clob, l_result); | |
/* ワークスペース名 */ | |
select workspace into l_result from apex_workspaces where workspace_id = :WORKSPACE_ID; | |
append(l_clob, q'~ワークスペース名~', true); | |
append(l_clob, q'~select workspace into l_result from apex_workspaces where workspace_id = :WORKSPACE_ID~', true); | |
append(l_clob, l_result); | |
/* ORDS別名 */ | |
select pattern into l_result from user_ords_schemas where parsing_schema = sys_context('USERENV','CURRENT_USER'); | |
append(l_clob, q'~ORDS別名~', true); | |
append(l_clob, q'~select pattern into l_result from user_ords_schemas where parsing_schema = sys_context('USERENV','CURRENT_USER')~', true); | |
append(l_clob, l_result); | |
/* アプリケーション別名 */ | |
l_result := utl_url.escape(lower(:APP_ALIAS), false, 'AL32UTF8'); | |
append(l_clob, q'~アプリケーション別名 - ただし日本語などを設定しなければ lower(:APP_ALIAS)で十分~', true); | |
append(l_clob, q'~utl_url.escape(lower(:APP_ALIAS), false, 'AL32UTF8')~', true); | |
append(l_clob, l_result); | |
/* それ以外の確認方法 */ | |
l_result := owa_util.get_cgi_env('X-APEX-BASE'); | |
append(l_clob, q'~owa_util.get_cgi_env('X-APEX-BASE')~', true); | |
append(l_clob, l_result); | |
l_result := owa_util.get_cgi_env('SCRIPT_NAME'); | |
append(l_clob, q'~owa_util.get_cgi_env('SCRIPT_NAME')~', true); | |
append(l_clob, l_result); | |
l_result := owa_util.get_cgi_env('SCRIPT_PREFIX'); | |
append(l_clob, q'~owa_util.get_cgi_env('SCRIPT_PREFIX')~', true); | |
append(l_clob, l_result); | |
l_result := owa_util.get_cgi_env('PATH_INFO'); | |
append(l_clob, q'~owa_util.get_cgi_env('PATH_INFO')~', true); | |
append(l_clob, l_result); | |
l_result := owa_util.get_cgi_env('PATH_PREFIX'); | |
append(l_clob, q'~owa_util.get_cgi_env('PATH_PREFIX')~', true); | |
append(l_clob, l_result); | |
return l_clob; | |
end; |
APEXアプリケーションに組み込んで実行すると、以下のように表示されます。
https://github.com/ujnak/apexapps/blob/master/exports/apex-util-host-url.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完