通过JavaScript Oracle APEX打开模式对话框

时间:2017-07-10 22:07:48

标签: oracle oracle-apex

我正在尝试通过JavaScript重定向网址打开模态对话框页面。

我的代码是这样的:

@Setup

但我收到的错误是:

enter image description here

谁能告诉我我做错了什么?

或者可能是另一种重定向到模态对话框页面的方法?

2 个答案:

答案 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;