我有一个报告,它接收一个List参数以在IN子句中使用它:
$X{IN, personID, _personID}
通过iReport中的Web应用程序或远程存储库视图运行报告时,该报告可以正常工作。
现在我需要使用REST api来调用它。我尝试了几种不同的方法来传递我的资源描述符中的列表值,但没有一种方法有效。
<resourceDescriptor name="Test_Report" wsType="reportUnit" uriString="/Test/Test_Report" isNew="false">
<parameter name="_personId" isListValue="true"><![CDATA[1]]></parameter>
</resourceDescriptor>
上面的示例返回以下错误:
Invalid type java.lang.String for parameter _personId used in an IN clause; the value must be an array or a collection.
我也尝试了以下内容:
<parameter>
<name>_personId</name>
<value isListValue="true">
3
</value>
</parameter>
但是这会返回包含所有记录的报告,而不仅仅是Id = 3的人。
答案 0 :(得分:3)
我解决此问题的方法是使用JasperServer的REST V2服务。
此外,V2与第一版服务相比具有两个优势:
运行和导出报告所需的所有信息都通过请求URL传递,例如:
<host>/rest_v2/reports/Test/TestReport.html?_personId=3&_personId=4&_personId=5&_personId=6
答案 1 :(得分:0)
您的方法完全可以,但是还有另一个关于集合类型参数的小技巧(可能是个错误)
(3,4,5,6)->?_personId=3&_personId=4&_personId=5&_personId=6
(3)->?_personId=3&_personId=
顺便说一下,我在docker上使用Jasper Server CE 7.2.0。