通过 JavaScript Oracle APEX 打开模式对话框
Posted
技术标签:
【中文标题】通过 JavaScript Oracle APEX 打开模式对话框【英文标题】:Open modal dialog through JavaScript Oracle APEX 【发布时间】:2017-12-14 19:11:24 【问题描述】:我正在尝试通过 javascript 重定向 URL 打开模式对话框页面。
我的代码是这样的:
$('#Subnet tr').each(function (i, row)
var $row = $(row);
var $hostname = $row.find('[headers=Hostname]');
if($hostname.text() == '-')
var url = "f?p="+$v('pFlowId')+":113:"+$v('pInstance')+"::::P113_SUBNET_ID:"+$row.find('[headers=ID]').text();
$hostname.html("<a href='"+url+"'><span class='fa fa-plus-square-o'></span></a>");
console.log($row.find('[headers=ID]').text()+ ' / '+$row.find('[headers=Address]').text());
);
但我收到一条错误消息:
谁能告诉我我做错了什么?
或者也许是另一种重定向到模态对话框页面的方式?
【问题讨论】:
请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。 How to Ask 【参考方案1】:您应该使用页面进程来计算 URL。 这可能是一个 Ajax 进程:
DECLARE
l_url varchar2(2000);
l_app number := v('APP_ID');
l_session number := v('APP_SESSION');
l_item_name VARCHAR2(2000) := 'P27_XYZ';
BEGIN
l_url := APEX_UTIL.PREPARE_URL(
p_url => 'f?p=' || l_app || ':'||apex_application.g_x01||':'||l_session||'::NO::'||l_item_name||':'||apex_application.g_x02,
p_checksum_type => 'SESSION');
htp.p(l_url);
END;
用这个 Javascript 调用它:
apex.server.process(
'PREPARE_URL',
x01: 27,
x02: 'myvalue'
,
success: function (pData)
console.log(pData);
,
dataType: "text"
);
你会得到一个 javascript 代码,你需要调用它。它会计算出正确的校验和,您可以完美地打开对话框。
【讨论】:
【参考方案2】:这也是一个可行的解决方案(略有不同)。
请注意调用 apex.navigation.redirect 以实际打开对话框页面。
function editAgenda (p_agenda_id)
l_url = 'f?p=#APP_ID#:72:#SESSION#::NO:RP,72:P72_AGENDA_ID:#AGENDA_ID#';
l_url = l_url.replace('#APP_ID#', $v('pFlowId'));
l_url = l_url.replace('#SESSION#', $v('pInstance'));
l_url = l_url.replace('#AGENDA_ID#', p_agenda_id);
// execute PL/SQL API apex_uti.prepare_url to generate a valid Session State Protection checksum
apex.server.process(
'editAgendaDA',
x01: l_url,
success: function (pData)
console.log(pData);
// Call Modal Dialog Page
apex.navigation.redirect(pData);
,
dataType: "text"
);
-- 处理editAgendaDA(在Ajax回调中)
declare
l_url varchar2(2000);
v_result varchar2(4000);
begin
v_result := apex_util.prepare_url(apex_application.g_x01);
htp.prn(v_result);
end;
【讨论】:
【参考方案3】:在某些情况下,使用“重定向到此应用程序中的页面”操作、静态 ID(例如,button1
)和自定义属性(例如,style="display:none"
)创建一个按钮会很有帮助:
然后,在您的 JavaScript 代码中,调用 $('#button1').click();
【讨论】:
您说“在某些情况下,创建一个按钮会有所帮助……”您能否详细说明这会有所帮助的情况? 例如,当您想在报告中有一列带有指向另一个模式窗口的链接时 - 在每一行中。除此之外,您的意思是 APEX 中的“低代码”?以上是关于通过 JavaScript Oracle APEX 打开模式对话框的主要内容,如果未能解决你的问题,请参考以下文章
Oracle Apex:PL/SQL 块中的 Javascript 代码
如何在动态操作中单击按钮时调用Oracle APEX中的javascript函数?
JavaScript 调用`setTimeout` 在 Oracle Apex 中不起作用
如何在 Oracle Apex 中使用静态 ID 定位图表系列?