2012-10-17 50 views
1

我有一個用於填充另一個輸入控件的幾個輸入控件的報告。忽略多選輸入控件的空值?

我的輸入控件:

  1. GPI - 具有產品代碼的多選擇輸入控制。該參數是一個集合。
  2. NAME_LOOKUP - 用戶可以輸入產品名稱的單值文本框。該參數是一個字符串。
  3. NDC - 什麼是GPINAME_LOOKUP輸入,用於獲取基於價值觀的藥品代碼列表。

用於填充NDC查詢有這個WHERE子句

WHERE (
    REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i') 
    OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i') 
     ) 
    OR ($X{IN, GPI, gpi}) 

它的工作原理爲$X語法設計 - 如果用戶不選擇GPI值從列表中,我的NDC輸入控件顯示所有藥物代碼。但是,我只想在從GPI輸入控件中實際選擇一個值時顯示藥物代碼。

當我嘗試

WHERE (
    REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i') 
    OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i') 
     ) 
    OR ($X{IN, GPI, gpi} AND $P{gpi} IS NOT NULL) 

我得到JasperReports的服務器NDC輸入控制無效列類型。

當我嘗試

WHERE (
    REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i') 
    OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i') 
     ) 
    OR ($X{IN, GPI, gpi} AND $P!{gpi} IS NOT NULL) 

我得到一個丟失的表達錯誤。

什麼我可以做的NDC輸入控制的結果限制爲僅選擇GPI,而不是所有的結果嗎?

回答

2

我剛剛發現這一點的同時遇到了同樣的問題,我終於解決了它使用存儲列表的lenght第二個參數:

<parameter name="potentially_empty_list" class="java.util.Collection"/> 
<parameter name="num_of_list_elements" class="java.lang.Integer" isForPrompting="false"> 
     <defaultValueExpression> 
<![CDATA[$P{potentially_empty_list}.size()]]> 
</defaultValueExpression> 
</parameter> 

和SQL查詢,然後將是:

[... select etc...] 
WHERE $X{IN,mysql_column_name, ist} 
AND $P{num_of_list_elements} > 0 

對於空列表將發送到mysql:

WHERE 0 = 0 #(that's how jasper parses $X{IN..} for an empty collection 
AND 0 > 0 # don't match anything :) 
0

有一個空因爲$ X {NOTIN,...}在空列表的情況下也計算爲0 = 0。

因此,你可以這樣做:

($X{IN, cs.companyid, companyIds} 
    AND NOT 
    ($X{NOTIN, cs.companyid, companyIds}))