【发布时间】:2015-12-01 22:20:30
【问题描述】:
在 BIRT 报告中,有两个字符串文本框参数在“编辑参数”页面上看起来相同,并且在“默认值”框中都是空的。但是,当我选择运行报告时,一个默认选择“空值”,而另一个默认为空字符串。如何配置使用哪个默认值?数据集没有使用任何参数,因为它们只是文本。
【问题讨论】:
标签: parameters null birt
在 BIRT 报告中,有两个字符串文本框参数在“编辑参数”页面上看起来相同,并且在“默认值”框中都是空的。但是,当我选择运行报告时,一个默认选择“空值”,而另一个默认为空字符串。如何配置使用哪个默认值?数据集没有使用任何参数,因为它们只是文本。
【问题讨论】:
标签: parameters null birt
处理空参数是 BIRT 的弱点之一。 例如,不允许仅将数据集参数的默认值保留为空。 如果在运行时实际上将 null 传递给数据集,BIRT 会吐出巨大的无用堆栈跟踪,告诉它不支持...... 在 Oracle 端,NULL 和空字符串是等价的,所以我通常使用 "" 作为默认值,并确保使用这个小助手将从上下文传递的 null 转换为 "":
function nvl_mt(x) {
if (x==null) {
return "";
}
return x;
}
要找出参数行为不同的原因,请查看 XML 源代码,您可能会发现其中的不同之处。
还请注意,对于每个报告参数,BIRT 都有一个默认值存储在 .rptdesign 中,还有一个默认值存储在相应的 .rptconfig 文件中,仅在从以下位置启动报告时使用IDE。
【讨论】:
我有几份具有类似限制的报告。
一种解决方案是使用“All”作为默认值,如果 SQL 像这样,则使用 bit。它返回输入的单个值或所有值('All' 在 CONTCTSM1.OPERATOR_ID 中不是有效值,因此它始终返回 null。
where CONTCTSM1.OPERATOR_ID = ?
or
'All' = ?
您可以在 SQL 中使用 like 语句和 % 作为默认值。
where UPMCNOTIFICATIONCONTACTSM1.UPMC_ADDRESS like ?
and UPMCNOTIFICATIONCONTACTSM1.UPMC_FULL_NAME like ?
但是
Null 不会在通配符搜索中显示。因此,如果您的数据中确实有 Null,您可能需要 SQL isnull() 或 sub is null 查询
and ( UPMC_METADATA_DOMAIN like ?
or UPMC_METADATA_DOMAIN is null )
【讨论】: