[英]Jasperserver report execution service with collection parameter
當我嘗試將超過值傳遞給請求正文中的集合類型參數時,我在生成碧玉報告時遇到了一些麻煩。 在我的關系中,我的參數是這樣描述的
<parameter name="skillList" class="java.util.Collection" nestedType="java.lang.String">
<parameterDescription><![CDATA[list of skill]]></parameterDescription>
</parameter>
在 jaspersoft studio 中,當我嘗試可視化我的報告並添加更多價值時,它運行良好,並且生成了我的報告
但是,當我嘗試使用 HTTP POST 和這樣的請求主體使用服務器的執行服務時:
<reportExecutionRequest>
<reportUnitUri>MyReportURI</reportUnitUri>
<async>false</async>
<outputFormat>pdf</outputFormat>
<parameters>
<reportParameter name="title">
<value>--- titre test ---</value>
</reportParameter>
<reportParameter name="header">
<value>@@@ header test @@@</value>
</reportParameter>
<reportParameter name="name">
<value>LE TUTOUR</value>
</reportParameter>
<reportParameter name="surname">
<value>Erwan</value>
</reportParameter>
<reportParameter name="skillList">
<value>java</value>
<value>maven</value>
</reportParameter>
</parameters>
</reportExecutionRequest>
如果我在 SkillList 參數中只有一個值,我的關系會很好地生成,但是當我添加另一個值時,我會收到 HTTP 400 錯誤請求。
在服務文檔中,有許多示例具有多個值,所以我不明白為什么沒有生成我的報告。
如果有人有解決方案或遇到同樣的問題並解決了它,我不會拒絕一些幫助。
編輯在一次新的嘗試中我改變了我的參數,它現在是一個子數據集
<subDataset name="listSkill" uuid="8027f62e-3b29-4faf-b11a-185b4db46d6f">
<field name="skill" class="java.lang.String">
<fieldDescription><![CDATA[_THIS]]></fieldDescription>
</field>
</subDataset>
以及使用方法
<componentElement>
<reportElement x="0" y="200" width="100" height="30" uuid="26b52f0f-e1e0-451e-9183-2df0f1f1ce65"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="listSkill" uuid="593d4d96-cbaf-46ba-94ef-97344e0cb4f2">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{skills}) ]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="30" width="100">
<textField>
<reportElement x="0" y="0" width="100" height="30" uuid="061f84d9-205a-4f49-a711-1f657b1fa5fd"/>
<textFieldExpression><![CDATA[$F{skill}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
當我生成我的報告時仍然在 jaspersoft studio 中工作,但在嘗試使用服務器的 REST API 執行它時卻不行。
解決了這個問題:
現在我只將 1 個參數傳遞給我的 rapport,一個 json 字符串,其中包含我的所有參數作為字段。
我使用與該字符串匹配的數據適配器,並將所有 $P{xxxx} 替換為 $F{xxxx}。
然后我使用報告的JSON_INPUT_STREAM
參數將該字符串轉換為字節數組輸入流。
在這個 json 字符串中,我的列表對象是這樣描述的
"LIST_SKILL": [
["skill one", "value 1"],
["skill two", "value 2"],
["skill three", "value 3"]
]
然后在我的列表對象上,在 dataSet properties::JRDatasource 表達式中
((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("LIST_SKILL")
之后,我的報告在 jaspersoft 工作室/服務器中正確生成,並帶有休息服務調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.