Модальные диалоги должны открываться с apex.navigation.dialog
. Когда кто-то вызывает apex_util.prepare_url
для модальной страницы, он генерирует правильный код JavaScript, который учитывает настройки для целевой страницы.
Существует опция, p_plain_url
, которая может использоваться для получения только URL, но не включайте ее в GenerateURL
, так как остальное важно. Другой параметр, p_triggering_element
, позволяет указать элемент для действия Dynami c (это не вариант с apex_page.get_url, который работает аналогично).
Допустим, GenerateURL
выглядело так ( обратите внимание, что я передаю документ как triggeringElement):
declare
l_url varchar2(512);
begin
l_url := apex_util.prepare_url(
p_url => 'f?p=' || :APP_ID || ':51:' || :APP_SESSION || ':::::P51_ID:' || apex_application.g_x01,
p_triggering_element => 'document'
);
apex_json.open_object();
apex_json.write('url', l_url);
apex_json.close_object();
end;
Тогда код JavaScript можно изменить следующим образом:
apex.server.process(
'GenerateURL',
{x01: idForURL},
{success: function (pData) {
var funcBody = pData.url.replace(/^"javascript:/, '').replace(/\"$/,'');
new Function(funcBody).call(window);
}
});
Обратите внимание, что JavaScript проходит идентификатор процесса, который генерирует URL, а не весь URL. Это делает использование процесса несколько ограниченным, что помогает пользователям не злоупотреблять им. Можно даже добавить проверку, которая проверяет, что пользователь может просматривать переданное значение идентификатора.
Имея это, вы можете добавить динамическое c действие, прослушивающее диалог Closed событие в document
(JavaScript выражение = документ). Обратите внимание, что событие не сработает, если диалоговое окно закрыто с помощью кнопок закрытия или отмены.