Oracle apex Oracle APEX-如果从自定义按钮打开子模式对话框页面,如何刷新父页面IG

Oracle apex Oracle APEX-如果从自定义按钮打开子模式对话框页面,如何刷新父页面IG,oracle-apex,oracle-apex-19.1,Oracle Apex,Oracle Apex 19.1,我的页面上有一个IG,带有一个自定义工具栏按钮,可以打开一个模式对话框页面。由于模态对话框是如何打开的,因此我无法使用本机对话框关闭来捕获其关闭 我在IG中用于打开Modla对话框的javascript是: apex.server.process( 'GenerateURL', {x01: l_url}, {success: function (pData) {

我的页面上有一个IG,带有一个自定义工具栏按钮,可以打开一个模式对话框页面。由于模态对话框是如何打开的,因此我无法使用本机
对话框关闭来捕获其关闭

我在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。如何从父页面捕获模式对话框关闭

模式对话框应使用
apex.navigation.dialog
打开。当为模式页面调用
apex\u util.prepare\u url
时,它会生成正确的JavaScript代码,并考虑目标页面的设置

有一个选项,
p\u plain\u url
,可以用来只获取url,但不要在
GenerateURL
中启用它,因为其余的都很重要。另一个参数,
p\u triggering\u element
,允许您为动态操作指定元素(这不是apex\u page.get\u url的选项,其工作原理类似)

让我们假设
GenerateURL
看起来像这样(注意,我将文档作为triggeringElement传递):

然后可以将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 Expression=document)。请注意,如果通过关闭或取消按钮关闭对话框,则不会触发事件。

谢谢。idForURL是什么?我应该在那里放什么?谢谢!!我以前缺少触发元素!加上它,一切都不同了。尽管我仍然不确定作为
idForUrl
传递什么,尽管它没有得到利用,但我包含
idForUrl
只是为了显示您可能会在URL中传递会话状态。通常,URL从报表转到表单,表单页面的主键通过URL语法设置。这只是向您展示了如何做到这一点,但您的用例可能不需要它。那么我是否应该将这部分`{x01:idForURL}`全部排除在外?或者只是将其设置为空字符串?您的URL是否设置了会话状态(URL中的位置7和8)?如果没有,请随意将其完全移除。
apex.server.process(    
    'GenerateURL',
    {x01: idForURL},
    {success: function (pData) {           
      var funcBody = pData.url.replace(/^"javascript:/, '').replace(/\"$/,'');

      new Function(funcBody).call(window);
    }
});