0

我的页面上有一个带有自定义工具栏按钮的 IG,可打开一个模态对话框页面。由于模态对话框的打开方式,我无法使用 native 捕获其关闭Dialog Close

我在 IG 中用来打开 Modla 对话框的 javascript 是:

            apex.server.process(    
                'GenerateURL',
                {x01: l_url},
                {success: function (pData) {           
                    console.log(pData);
                    // Call Modal Dialog Page
                    apex.navigation.redirect(pData);
                },
                dataType: "text"     
           });

问题是模式对话框关闭后我需要刷新我的 IG。如何从父页面捕获模态对话框关闭?

4

1 回答 1

0

模态对话框应该用apex.navigation.dialog. 当调用apex_util.prepare_url模态页面时,它会生成正确的 JavaScript 代码,该代码会考虑到目标页面的设置。

有一个选项 ,p_plain_url可用于仅获取 URL,但不要启用它,GenerateURL因为其余部分很重要。另一个参数p_triggering_element允许您为动态操作指定元素(这不是 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 将 ID 传递给生成 URL 的进程,而不是整个 URL。这使得该过程的使用受到一定限制,这有助于防止用户滥用它。您甚至可以添加一个检查来验证用户是否能够查看传入的 ID 值。

有了它,您可以添加一个动态操作来侦听(JavaScript 表达式 = 文档)上的Dialog Closed事件。document请注意,如果通过关闭或取消按钮关闭对话框,则不会触发该事件。

于 2020-03-10T01:04:17.143 回答