Jasper reports 如何在Jaspersoft Studio中传递数组/集合类型的参数,并在查询时使用它?
我试图使用IN子句作为参数传递一个值数组,以从DW获取报告 问题是,当我将参数设置为数组或集合时,它不会在Jaspersoft Studio预览屏幕上提示,并且我无法使用它 第一次,我尝试将参数作为字符串传递,其中$p{Convenrio}是一个字符串,在中传递到complete:Jasper reports 如何在Jaspersoft Studio中传递数组/集合类型的参数,并在查询时使用它?,jasper-reports,jaspersoft-studio,Jasper Reports,Jaspersoft Studio,我试图使用IN子句作为参数传递一个值数组,以从DW获取报告 问题是,当我将参数设置为数组或集合时,它不会在Jaspersoft Studio预览屏幕上提示,并且我无法使用它 第一次,我尝试将参数作为字符串传递,其中$p{Convenrio}是一个字符串,在中传递到complete: //Select and joins here... WHERE ("o"."status_operacao" IN ('EFETUADO', 'SUSPENSO')) AND ("c"."codigo" IN
//Select and joins here...
WHERE ("o"."status_operacao" IN ('EFETUADO', 'SUSPENSO'))
AND ("c"."codigo" IN ( $P{convenio}))
AND ("o"."codigo_produto" = 1)
它不起作用,返回一个在处缺少EOF的错误,但没有关闭错误
最后一个选项是使用$X{},因此我将de$p{Convenrio}设置为数组/集合类型,并将查询如下:
//Select and joins here...
WHERE ("o"."status_operacao" IN ('EFETUADO', 'SUSPENSO'))
AND ($X{IN, "c"."codigo", convenio})
AND ("o"."codigo_produto" = 1)
<parameter name="collectionParam" class="java.util.Collection" nestedType="java.lang.Long"/>
SELECT * FROM table_name c WHERE c.attr IN ('val')
SELECT * FROM table_name c WHERE c.attr2 IN ('val1', 'val2')
但是现在参数没有提示,报告给我带来了一切。JasperReports引擎支持嵌套类型-我们可以使用类型化集合
在JSS上显示集合-使用对话框设置值
例如,我们可以这样声明集合类型的参数:
//Select and joins here...
WHERE ("o"."status_operacao" IN ('EFETUADO', 'SUSPENSO'))
AND ($X{IN, "c"."codigo", convenio})
AND ("o"."codigo_produto" = 1)
<parameter name="collectionParam" class="java.util.Collection" nestedType="java.lang.Long"/>
SELECT * FROM table_name c WHERE c.attr IN ('val')
SELECT * FROM table_name c WHERE c.attr2 IN ('val1', 'val2')
我们还可以在查询时使用字符串类型的参数,并使用$p!{}表达式
例如:
<parameter name="param" class="java.util.Collection">
<defaultValueExpression><![CDATA[java.util.Arrays.asList("val")]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM table_name c WHERE $X{IN, c.attr, param}
</queryString>
<parameter name="param" class="java.lang.String">
<defaultValueExpression><![CDATA["'val1', 'val2'"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM table_name c WHERE c.attr2 IN ($P!{param})
</queryString>