【问题标题】:Oracle APEX Date Filters Applied with apex_util.ir_filter使用 apex_util.ir_filter 应用的 Oracle APEX 日期过滤器
【发布时间】: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


    【解决方案1】:

    您是否尝试过使用 apex_ir.add_filter 代替?我很确定 apex_util.ir_filter 代表 apex_ir,但仍然如此。

    其次,恐怕您几乎无能为力。 IR 有一个糟糕的 API,到目前为止还几乎不存在。理想情况下,您可以定位某些过滤器等,但唉。你无法控制行为。如果我知道报告已被清除或重置,或者在新会话期间,我只会添加过滤器。
    那么为什么不只应用一次过滤器,然后让用户使用 IR 功能来更改过滤器而不是重写所述功能呢?

    如果你真的,真的必须有项目来引导这个,我只是建议不要使用 IR 的内置过滤器,因为你可以看到行为不是你想要的,而是通过过滤结果在源查询中添加过滤器。类似的东西:

    AND (:P4027_DATE_TO IS NOT NULL AND from_dt >= :P4027_DATE_TO)
    AND (:P4027_DATE_FROM IS NOT NULL AND to_dt <= :P4027_DATE_FROM)
    

    【讨论】:

    • APEX_IR.ADD_FILTER 函数不起作用,但我最终采纳了您的最后建议,并在报告查询中的“where 子句”中添加了一些额外的行。
    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多