Oracle Apex 5.1交互式报告编辑后跳转至首行问题求助
解决Oracle Apex 5.1交互式报告编辑后跳转回首页的问题
我之前在Apex 5.1里也碰到过这个一模一样的烦问题——编辑完分页后的行,点「应用更改」就直接跳回第一页,每次都得重新翻找刚才编辑的位置,效率低到爆炸。下面给你几个亲测有效的解决办法:
方法1:利用Apex原生分页参数(最稳定推荐)
Apex的交互式报告本身会记录当前分页的起始和结束行,我们只需要在提交后把这些参数传递回去就行:
- 打开页面设计器,找到你的「应用更改」按钮
- 进入按钮的分支属性页,添加一个新分支
- 分支类型选择「重定向到页面或URL」,目标页面选当前页面
- 在「设置项」区域,添加两个参数(把
X替换成你的实际页面编号):- 项:
PX_IR_ROW_START,值:&PX_IR_ROW_START. - 项:
PX_IR_ROW_END,值:&PX_IR_ROW_END.
这两个参数是Apex用来标记当前分页范围的,提交后传递它们就能让页面精准回到之前的分页位置。
- 项:
方法2:用JavaScript保存并恢复滚动位置
如果方法1在某些特殊场景下不生效(比如你的报告有自定义过滤条件),可以用JS来手动保存位置:
- 创建隐藏项:在页面上添加两个隐藏项,比如
PX_SCROLL_POS(存滚动位置)和PX_IR_CURRENT_START(存分页起始行) - 页面加载时保存状态:添加一个「页面加载」触发的动态动作,动作选「执行JavaScript代码」:
// 保存当前滚动条位置 $('#PX_SCROLL_POS').val($(window).scrollTop()); // 保存当前分页的起始行 var irStart = $('[name="PX_IR_ROW_START"]').val(); $('#PX_IR_CURRENT_START').val(irStart); - 提交后恢复状态:添加一个「页面加载后」触发的动态动作,动作选「执行JavaScript代码」(把
YOUR_IR_STATIC_ID换成你交互式报告的静态ID):// 恢复滚动位置 var scrollPos = $('#PX_SCROLL_POS').val(); if (scrollPos) { $(window).scrollTop(parseInt(scrollPos)); } // 跳转到对应的分页 var irStart = $('#PX_IR_CURRENT_START').val(); if (irStart) { var irWidget = apex.region('YOUR_IR_STATIC_ID').widget().interactiveReport(); var rowsPerPage = irWidget('option', 'rowsPerPage'); var targetPage = Math.ceil(parseInt(irStart) / rowsPerPage); irWidget('gotoPage', targetPage); }
方法3:检查报告的重置分页设置
有时候是报告本身的属性导致的,先排查一下:
- 打开交互式报告的属性编辑器
- 找到「高级」分类,查看「重置分页」选项,如果设为「是」,改成「否」
不过这个选项在5.1版本里对编辑提交的场景支持有限,建议还是结合前面的方法一起用。
我自己平时用方法1最多,完全依赖Apex原生机制,不会有兼容性问题,你可以先试试这个方案。
内容的提问来源于stack exchange,提问作者Vandita Verma
相关产品推荐
相关产品推荐

