【发布时间】:2015-04-23 21:54:59
【问题描述】:
我在我的 Oracle APEX 应用程序中使用动态操作将日期过滤器应用于我的交互式报告。动态操作由我的“日期从”(P4027_DATE_FROM) 或“日期到”(P4027_DATE_TO) 日期框中发生的更改触发。动态操作提交两个页面项目并包含一个 PLSQL 进程和一个 javascript 进程。
PLSQL 代码首先执行。它使用 apex_util.ir_filter 将 LTE 过滤器应用于“Date To”,将 GTE 过滤器应用于“Date From”。换句话说,我试图创建自己的“BETWEEN”函数。我还在 PLSQL 代码中包含了一些逻辑,如果一个日期为空白,则只执行一个或另一个。
我在新报告中使用这些过滤器的前几次运行良好。但是,如果我使用过去应用的过滤器(第二次使用相同的“Date From”),就会开始发生奇怪的事情。例如,之后对“日期从”的更改会将新日期添加到过滤器列表中,但不会检查(应用)过滤器。对“日期至”的更改将检查适当的过滤器,但也会检查所有以前使用的过滤器,这些过滤器在日期列上使用 >= 运算符。
这是 PLSQL 代码:
BEGIN
--clear out functions prior to execution
apex_util.ir_filter(p_page_id=>4027,p_report_column=>'DATE_COL',p_operator_abbr=>'EQ',p_filter_value=>'');
IF (:P4027_DATE_FROM IS NOT NULL AND :P4027_DATE_TO IS NULL) THEN
apex_util.ir_filter(p_page_id=>4027,p_report_column=>'DATE_COL',p_operator_abbr=>'GTE',p_filter_value=>:P4027_DATE_FROM);
ELSIF (:P4027_DATE_FROM IS NOT NULL AND :P4027_DATE_TO IS NOT NULL) THEN
apex_util.ir_filter(p_page_id=>4027,p_report_column=>'DATE_COL',p_operator_abbr=>'GTE',p_filter_value=> :P4027_DATE_FROM);
apex_util.ir_filter(p_page_id=>4027,p_report_column=>'DATE_COL',p_operator_abbr=>'LTE',p_filter_value=> :P4027_DATE_TO);
ELSIF (:P4027_DATE_FROM IS NULL AND :P4027_DATE_TO IS NOT NULL) THEN
apex_util.ir_filter(p_page_id=>4027,p_report_column=>'DATE_COL',p_operator_abbr=>'LTE',p_filter_value=> :P4027_DATE_TO);
ELSE
apex_util.ir_filter(p_page_id=>4027,p_report_column=>'DATE_COL',p_operator_abbr=>'EQ',p_filter_value=>'');
END IF;
END;
javascript 进程在 PLSQL 进程之后刷新页面,似乎工作正常
【问题讨论】:
标签: date plsql oracle-apex