簡體   English   中英

帶集合參數的 Jasperserver 報表執行服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM