答案 0 :(得分:0)
您应该使用页面处理来计算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代码,您需要调用它。它会计算出正确的校验和,您可以完美地打开对话框。
答案 1 :(得分:0)
这也是一个可行的解决方案(略有不同)。
请注意调用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;