iReport, как распечатать поля другой таблицы - PullRequest
3 голосов
/ 28 декабря 2011

Мне нужно несколько запросов в моем отчете, поэтому я добавил новый набор данных.Проблема в том, что я не могу использовать поля нового набора данных в своем отчете, ошибка: поле не существует.

Итак, как я могу иметь несколько запросов в моем отчете (для печати полей другой таблицы)без создания подотчета для каждого поля?

Спасибо.

1 Ответ

1 голос
/ 24 мая 2012

К сожалению, iReport работает не так. Вам нужно собрать все свои данные в один набор данных, чтобы использовать поля рядом. См. Подробный ответ @ GenericJon об использовании datasetRun, где ваши поля используются в качестве входных параметров для определения другого набора данных.

Если вы действительно хотите, чтобы параметры могли использоваться для передачи поля для вывода в datasetRun. Это выводит Dataset1> Field1 / Dataset2> Field2.

<subDataset name="TotalUsers">
    <parameter name="Users" class="java.lang.Integer" isForPrompting="false"/>
    <parameter name="Date" class="java.util.Date" isForPrompting="false"/>
    <queryString language="SQL">
        <![CDATA[CALL GetTotalUsersAtDate($P{Date})]]>
    </queryString>
    <field name="TotalUsers" class="java.lang.Long"/>
</subDataset>
...

<componentElement>
    <reportElement x="0" y="78" width="555" height="16"/>
    <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" printOrder="Vertical">
        <datasetRun subDataset="TotalUsers">
            <parametersMapExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}]]></parametersMapExpression>
            <datasetParameter name="Users">
                <datasetParameterExpression><![CDATA[$F{MusicSubscribers}]]></datasetParameterExpression>
            </datasetParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        </datasetRun>
        <jr:listContents height="16" width="555">
            <textField pattern="#,##0.00 %" isBlankWhenNull="true">
                <reportElement style="table_TD" x="475" y="0" width="80" height="16"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{Users}.doubleValue()/$F{TotalUsers}.doubleValue()]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement style="table_TD" x="0" y="0" width="475" height="16"/>
                <textElement textAlignment="Left" markup="none"/>
                <text><![CDATA[Proportion of total users]]></text>
            </staticText>
        </jr:listContents>
    </jr:list>
</componentElement>

Я бы пошел дальше, чтобы предложить вам выполнять как можно больше математических операций и сопоставлений вне iReport, т. Е. Использовать хранимые процедуры, если источником данных является база данных.

...