oos-utils
oos-utils copied to clipboard
Parse an APEX URL
Reverse engineering an APEX URL. See apex_page.get_url for the parameters that this should return.
Update:
- Should parse all "normal" URLs and parse into logical structures
- Need to support new APEX 20.1 friendly URLs
Wrote code, but took out until need arises:
Code:
type rec_apex_url is record(
application_id apex_application_pages.application_id%type,
page_id apex_application_pages.page_id%type,
session_id apex_workspace_sessions.apex_session_id%type,
request apex_workspace_activity_log.request_value%type,
debug varchar2(4000),
clear_cache varchar2(4000),
items varchar2(4000),
vals varchar2(4000),
printer_friendly varchar2(4000),
trace varchar2(4000)
);
function parse_url(
p_url in varchar2)
return rec_apex_url
as
l_return rec_apex_url;
l_array apex_application_global.vc_arr2;
l_url varchar2(32767) := p_url;
begin
-- Remove any http://... etc
l_url := regexp_replace(l_url, '^.*f?p', 'f?p');
l_array := apex_util.string_to_table(p_string => l_url, p_separator => ':');
if l_array.count = 0 then
null;
else
for i in 1..l_array.count loop
if i = 1 then
-- Page ID
l_return.application_id := regexp_replace(l_array(i), '.*=');
elsif i = 2 then
l_return.page_id := l_array(i);
elsif i = 3 then
l_return.session_id := l_array(i);
elsif i = 4 then
l_return.request := l_array(i);
elsif i = 5 then
l_return.debug := l_array(i);
elsif i = 6 then
l_return.clear_cache := l_array(i);
elsif i = 7 then
l_return.items := l_array(i);
elsif i = 8 then
l_return.vals := l_array(i);
elsif i = 9 then
l_return.printer_friendly := l_array(i);
elsif i = 10 then
l_return.trace := l_array(i);
end if;
end loop;
end if; -- l_array.count = 0
return l_return;
end parse_url;
Example:
declare
l_url oos_util_apex.rec_apex_url;
begin
l_url := oos_util_apex.parse_url('http://vcentos:10080/ords/f?p=160:1:1123123428512');
dbms_output.put_line('application_id: ' || l_url.application_id);
dbms_output.put_line('page_id: ' || l_url.page_id);
dbms_output.put_line('session_id: ' || l_url.session_id);
dbms_output.put_line('request: ' || l_url.request);
dbms_output.put_line('debug: ' || l_url.debug);
dbms_output.put_line('clear_cache: ' || l_url.clear_cache);
dbms_output.put_line('items: ' || l_url.items);
dbms_output.put_line('vals: ' || l_url.vals);
dbms_output.put_line('printer_friendly: ' || l_url.printer_friendly);
dbms_output.put_line('trace: ' || l_url.trace);
end;
/