4

我有一个报告,它接收一个 List 参数以在 IN 子句中使用它:

$X{IN, personID, _personID}

通过 Web 应用程序或 iReport 中的远程存储库视图运行报告时,该报告有效。

现在我需要使用 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 的人。

4

2 回答 2

4

我解决这个问题的方法是使用 JasperServer 的 REST V2 服务。

除此之外,V2 与服务的第一个版本相比有两个优势:

  • 它不需要资源描述符
  • 它在单个 GET 请求中运行和导出报告

运行和导出报告所需的所有信息都通过请求 URL 传递,例如:

<host>/rest_v2/reports/Test/TestReport.html?_personId=3&_personId=4&_personId=5&_personId=6

于 2013-09-13T13:00:41.750 回答
1

你的方法完全没问题,但是还有另一个关于集合类型参数的小技巧(可能是一个错误

  • 如果集合中有超过 1 个项目,则这完全可以正常工作: (3,4,5,6)->?_personId=3&_personId=4&_personId=5&_personId=6
  • 如果集合中只有 1 项,则还必须添加空项: (3)->?_personId=3&_personId=

顺便说一句,我在 docker 上使用 Jasper Server CE 7.2.0。

于 2020-01-02T15:42:24.157 回答