我在我的Oracle APEX應用程序中使用動態操作將日期過濾器應用於我的交互式報告。動態操作是由我的「Date From」(P4027_DATE_FROM)或「Date To」(P4027_DATE_TO)日期框中發生的更改觸發的。動態操作提交兩個頁面項目,幷包含一個PLSQL過程和一個JavaScript過程。Oracle APEX日期過濾器應用於apex_util.ir_filter
首先執行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過程後刷新頁面,似乎是工作的罰款
的APEX_IR.ADD_FILTER功能沒有工作,但我結束了你最後的建議,打算和加入一些額外的線路以「where子句」在我的報表查詢。 – jobrien9