2015-04-23 48 views
1

我在我的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過程後刷新頁面,似乎是工作的罰款

回答

0

你試過改用apex_ir.add_filter?我很確定apex_util.ir_filter委託給apex_ir,但仍然如此。其次,恐怕你沒有辦法可以做到。 IRs有一個糟糕的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) 
+0

的APEX_IR.ADD_FILTER功能沒有工作,但我結束了你最後的建議,打算和加入一些額外的線路以「where子句」在我的報表查詢。 – jobrien9