Как получить сумму значений повторяющихся элементов XML из списка в отчете? - PullRequest
1 голос
/ 26 марта 2020

У меня есть XML источник данных, который предоставляет список xpath <policyRiders>. В списке <policyRiders> есть xpath с именем <sumInsuredAmount>, который повторяется со списком <policyRiders> xpath. Я хочу взять сумму всех <sumInsuredAmount>.

XML Data Source

В настоящее время я использую таблицу и объявление переменной для генерации.

Это исходный под-набор данных:

<subDataset name="Dataset2">
    <queryString language="xPath">
        <![CDATA[/AUWrite/cacheDB/RetrievePolicyListResponse/policy/RetrievePolicyRiderListResponse/RLSPolicy/policyRiders]]>
    </queryString>
    <field name="sumInsuredAmount" class="java.lang.Integer">
        <property name="net.sf.jasperreports.xpath.field.expression" value="sumInsuredAmount"/>
        <fieldDescription><![CDATA[sumInsuredAmount]]></fieldDescription>
    </field>
    <variable name="ridersSumInsuredAmount" class="java.lang.Integer" resetType="None" calculation="Sum">
        <variableExpression><![CDATA[$F{sumInsuredAmount}]]></variableExpression>
    </variable>
</subDataset>

Это исходный код таблицы:

<componentElement>
    <reportElement isPrintRepeatedValues="false" x="20" y="40" width="129" height="10">
        <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
    </reportElement>
    <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="AllSectionsNoDetail">
        <datasetRun subDataset="Dataset2">
            <datasetParameter name="XML_DATA_DOCUMENT">
                <datasetParameterExpression><![CDATA[$P{XML_DATA_DOCUMENT}]]></datasetParameterExpression>
            </datasetParameter>
            <datasetParameter name="XML_INPUT_STREAM">
                <datasetParameterExpression><![CDATA[$P{XML_INPUT_STREAM}]]></datasetParameterExpression>
            </datasetParameter>
            <datasetParameter name="XML_FILE">
                <datasetParameterExpression><![CDATA[$P{XML_FILE}]]>/datasetParameterExpression>
            </datasetParameter>
            <datasetParameter name="net.sf.jasperreports.xml.source">
                <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.xml.source}]]></datasetParameterExpression>
            </datasetParameter>
            <datasetParameter name="XML_DATE_PATTERN">
                <datasetParameterExpression><![CDATA[$P{XML_DATE_PATTERN}]]></datasetParameterExpression>
            </datasetParameter>
            <datasetParameter name="XML_NUMBER_PATTERN">
                <datasetParameterExpression><![CDATA[$P{XML_NUMBER_PATTERN}]]></datasetParameterExpression>
            </datasetParameter>
            <datasetParameter name="XML_LOCALE">
                <datasetParameterExpression><![CDATA[$P{XML_LOCALE}]]></datasetParameterExpression>
            </datasetParameter>
            <datasetParameter name="XML_TIME_ZONE">
                <datasetParameterExpression><![CDATA[$P{XML_TIME_ZONE}]]></datasetParameterExpression>
            </datasetParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        </datasetRun>
        <jr:column width="138">
            <jr:detailCell height="24">
                <textField isBlankWhenNull="true">
                    <reportElement isPrintRepeatedValues="false" x="0" y="0" width="138" height="24" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/>
                    <textFieldExpression><![CDATA[$V{ridersSumInsuredAmount}]]></textFieldExpression>
                </textField>
            </jr:detailCell>
        </jr:column>
    </jr:table>
</componentElement>

Фактический результат:

**Actual result**

Фактический результат суммирования и отображения 200000,100000 и повторения элемента списка.

Не должно повторяться, так как total sumInsuredAmount должен генерироваться из одного поля.

sumInsuredAmount итоговое значение должно быть 150000, которое прибавляется от сложения 100000 и 50000.

Ожидаемый результат:

Expected Result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...