【发布时间】:2018-04-30 06:44:29
【问题描述】:
大家晚上好。
目前,我正在为 Oracle Apex 创建一个新页面,但我再次遇到了 Interactive Report 的问题。我的页面(命名为 500)由 id 为 rep_main 的 Interactive Report 和 id 为 rep_child 的 Classic 报表组成,它们通过主从逻辑连接(我选择行从主报告中,然后根据我的选择获得子项中的行)。此外,主报告的每一行都有几个按钮(精确地标记为“a”,带有“javascript:...”之类的链接),它们调用对话框窗口来更新所选行的数据。
我的目标是让页面对用户来说更舒适:首先,从主报告中选择的行应该改变它的颜色;其次,报告应正确刷新。第二个条件是,我在主报表中选择rown后,分页不能改变,页面视图不能自行向上滚动。
我设法在我的 IR 中创建主从逻辑并重新着色行(thanks to Stack Overflow 帮助我完成此任务),但我在正确刷新的条件下遇到了一些困难。除了 JavaScript/jQuery 函数,我必须调用标准 Apex 函数 apex.submit,因为如果我不这样做,我的 IR 的分页将不会保存,但同时页面自己向上滚动,这对用户来说是不太可能的。此外,任何对话窗口出现后,分页都会重置。
我试图在 Google 中找到解决方案,但一切都是徒劳的。我希望有人知道在我的情况下是否有任何解决方法(至少反对向上滚动)。
我使用 Oracle Apex 4.2.6.00.03,应用程序主要通过 Mozilla Firefox 执行。我为我的第 500 页编写的代码写在下面的当前帖子中。
在页面加载时使用 PL/SQL 行执行流程,如下所示:
:P500_MAIN_ID := APEX_UTIL.GET_NUMERIC_SESSION_STATE(P_ITEM => 'P500_MAIN_ID'); --receiving the chosen row's ID saved in session
主报告区域标题包含以下脚本:
<script>
$("#rep_main").find("table.apexir_WORKSHEET_DATA td).live("click",function(){
var chosenOne = $(this).find("span").attr("id"); //finding ID of the chosen row
chooseMAIN(chosenOne);
apex.submit({set:{'P500_MAIN_ID':chosenOne,'P500_CHILD_ID':null}});
});
</script>
在这段代码中P500_CHILD_RN是保存子报表行ID的项,函数chooseMAIN是:
function chooseMAIN(docID){
$.post('wwv_flow.show',
{'p_request' : 'APPLICATION_PROCESS=SET_MAIN',
'p_flow_id' : $v('pFlowId'),
'p_flow_step_id' : $v('pFlowStepId'),
'p_instance' : $v('pInstance'),
'x01' : docID},
function(data){
//for the opportunity to get the ID in pure JavaScript
$("#P500_MAIN_ID").val(docID);
$("#P500_CHILD_ID").val("");
$("#rep_main").trigger('apexrefresh');
$("rep_child").trigger('apexrefresh');
}
);
}
SET_MAIN 过程如下所示:
begin
APEX_UTIL.SET_SESSION_STATE(P_NAME => 'P500_CHILD_ID',P_VALUE => NULL);
APEX_UTIL.SET_SESSION_STATE(P_NAME => 'P500_MAIN_ID',P_VALUE => APEX_APPLICATION.G_X01);
end;
附言早些时候我向 IR here 寻求了一些帮助,但我仍然没有找到合适的解决方案(除了提交,它有我所说的副作用)。
【问题讨论】:
标签: javascript html oracle11g pagination oracle-apex