Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jasper reports 如何在Jaspersoft Studio中传递数组/集合类型的参数,并在查询时使用它?_Jasper Reports_Jaspersoft Studio - Fatal编程技术网

Jasper reports 如何在Jaspersoft Studio中传递数组/集合类型的参数,并在查询时使用它?

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

我试图使用IN子句作为参数传递一个值数组,以从DW获取报告

问题是,当我将参数设置为数组或集合时,它不会在Jaspersoft Studio预览屏幕上提示,并且我无法使用它

第一次,我尝试将参数作为字符串传递,其中$p{Convenrio}是一个字符串,在中传递到complete:

//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>