【问题标题】:Saving pagination in Oracle Apex Interactive Report在 Oracle Apex 交互式报表中保存分页
【发布时间】:2016-12-05 13:20:51
【问题描述】:

最近我在 Oracle Apex 4.2.0003 中遇到了在交互式报表中保存分页的问题。我有一个页面,其中有两个报告:第一个是经典报告,第二个是交互式报告,它们作为“主-详细信息”工作。
此外,交互式报告既有来自视图的数据,也有 HTML 元素,如带有模式或弹出窗口链接的图标。页面中的所有内容都可以正常工作,除了一件事:刷新它会导致重置“详细”交互式报告的分页,尽管完全刷新或部分刷新(不重置经典,“主”之一)。

我尝试使用 javascript 解决问题:我编写了一些代码,从页面获取当前分页并在更新之前将其保存,并且更新本身通过函数 gReport.navigate.paginate 进行。我可以使用这种方式,但它没有考虑到行数少于在交互式报告面板中选择的行数的情况(其中还有搜索栏等)。
我现在正在考虑的另一种解决问题的方法是从视图APEX_APPLICATION_PAGE_IR_RPT 获取有关每页当前行数的信息,但我不知道如何从interactive_report_id 列而不是从名为report_id.

当然,我有办法通过会话 ID 和视图类型(可以在交互式报告面板中自定义)来获取信息,但我不能说我喜欢。

所以我有以下问题:在我的情况下,如何使交互式报表不重置分页?有没有可能比从 APEX 视图中获取信息更容易?

【问题讨论】:

    标签: javascript oracle11g pagination oracle-apex


    【解决方案1】:

    这是一个不时出现的问题,这仍然是 apex 5 中的一个问题,因为没有支持的方法来做到这一点,即使它所需要的只是稍微打开 api,所以我们不会不需要破解它。
    您当然可以使用gReport.navigate.paginate,我建议您使用它。但请注意:Oracle 不支持它(如:未记录),并且在 apex 5 中不起作用(用于 IR 的 JS 已重做)。然而,即使在 apex 5 中,方法仍然相似:只是“破解”它。

    我不会查询视图。您仍然需要报告中的 ID 并与后端进行通信,您将产生比实际需要更多的问题。

    只要在javascript中找出是否有分页。

    当每页的行数超过允许的行数时,IR 中的 HTML:

    <td colspan="18" class="pagination" align="left">
      <span class="fielddata"> 1 - 15 of 1878 
        <a href="javascript:gReport.navigate.paginate('pgR_min_row=16max_rows=15rows_fetched=15')">
          <img src="/i/jtfunexe.gif" title="Next" alt="Next" align="absmiddle">
        </a>
      </span>
    </td>
    

    当行数少于或等于允许的行数时的 HTML:

    <td colspan="18" class="pagination" align="left"><span class="fielddata"> 1 - 1 of 1 </span></td>
    

    所以:你可以检查那里是否有锚标签。
    如果是:执行您的“分页”功能。
    如果没有:请刷新。

    【讨论】:

    • 非常感谢@Tom 的回答,但不幸的是,它只是部分帮助了我。我在我的 Javascript 代码中更改了一些逻辑,但它工作正常,当需要重置分页或存在查询的一部分位于中间或开头的情况时。最后说一下部分查询的情况,我有以下问题。 (对不起,但是网站告诉我写的太多了,所以我不得不在另一个答案中找到答案。)
    • 让我们在IR中使用的视图中有8行,每页的行数等于5。我去查询的“6 - 8”部分,当刷新的功能以保存分页模式执行,我得到“1 - 3”!尽管函数 gReport.navigate.paginate 确实 接收参数 6、3 和 3(min_row、max_row、rows_fetched),但我还是有这个东西。所以问题是:我应该怎么做才能有一个正确的工作解决方法?
    • @PiggyInTheMirror 您是否真的因为其他问题而打电话给paginate 有问题?我不知道你用什么代码来调用它,可能就是这样。执行本机刷新将根据设计重置为第一页,因此不可能。
    • 我不记得我正在处理的应用程序中可以使用paginate 的页面。我的代码是这样的: function refreshList(resetPG){ if(resetPG || anchorCount() == 0 || (anchorCount() == 1 && anchorSign() == '>'){ $(#'my_report' ).trigger('apexrefresh'); } else { var pagesArray = paginationText(); var min_row = pagesArray[0]; var rows_fetched = pagesArray[2] - min_row + 1; var max_row = rows_fetched; gReport.navigate.paginate( 'pgR_min_row=' + min_row + 'max_rows=' + max_row + 'rows_fetched=' + rows_fetched); } }
    • 哦,不,格式在答案中不起作用...@Tom,anchorCount() 和 anchorSign() 是获取当前分页及其符号的函数(我的意思是 '”)。并且刷新IR报告后起作用的函数只是处理css的函数。
    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多