Jasper reports 忽略多选输入控件中的空值?

Jasper reports 忽略多选输入控件中的空值?,jasper-reports,jasperserver,Jasper Reports,Jasperserver,我有一个包含多个输入控件的报告,这些控件用于填充另一个输入控件 我的输入控件: GPI-具有产品代码的多选输入控件。该参数是一个集合。 名称查找-用户可以在其中键入产品名称的单值文本框。参数是一个字符串。 NDC-药物代码列表,根据GPI和名称查找中输入的内容获取值。 填充NDC的查询有以下WHERE子句: 哪里 REGEXP_LIKEDESCRIPTION,$P{name_lookup},'i' 或者REGEXP_likedc,$P{name_lookup},'i' 或者$X{IN,GPI,G

我有一个包含多个输入控件的报告,这些控件用于填充另一个输入控件

我的输入控件:

GPI-具有产品代码的多选输入控件。该参数是一个集合。 名称查找-用户可以在其中键入产品名称的单值文本框。参数是一个字符串。 NDC-药物代码列表,根据GPI和名称查找中输入的内容获取值。 填充NDC的查询有以下WHERE子句:

哪里 REGEXP_LIKEDESCRIPTION,$P{name_lookup},'i' 或者REGEXP_likedc,$P{name_lookup},'i' 或者$X{IN,GPI,GPI} 它的工作原理与$X语法的设计目的相同——如果用户没有从列表中选择GPI值,我的NDC输入控件将显示所有药物代码。但是,我只想在实际从GPI输入控件中选择值时显示药物代码

当我尝试

哪里 REGEXP_LIKEDESCRIPTION,$P{name_lookup},'i' 或者REGEXP_likedc,$P{name_lookup},'i' 或者$X{IN,GPI,GPI}和$P{GPI}不为空 我在JasperReports服务器中为NDC输入控件获取了无效的列类型

当我尝试

哪里 REGEXP_LIKEDESCRIPTION,$P{name_lookup},'i' 或者REGEXP_likedc,$P{name_lookup},'i' 或者$X{IN,GPI,GPI}和$P!{gpi}不为空 我得到一个缺少表达式的错误


如何将NDC输入控件的结果限制为仅选定的GPI,而不是所有结果?

我在遇到相同问题时发现了这个问题,我最终使用第二个参数解决了它,该参数保持列表的长度:

<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>
对于空列表,将通过以下方式发送到mysql:

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

有一个有趣的替代方案,因为$X{NOTIN,…}在空列表的情况下也计算为0=0

因此,您可以这样做:

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