【问题标题】:Open modal dialog through JavaScript Oracle APEX通过 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

标签: oracle oracle-apex


【解决方案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 中的“低代码”?
      猜你喜欢
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多