2

サブレポートを使用する iReport で問題が発生しています。XML ソースを使用しています。

XML ソース

<bordereaux>
    <bordereau>
        <pages>
            <page>
                <numpage>1</numpage>
                <dosimetres>
                    <dosimetre>
                        <information>information</information>
                    </dosimetre>
                    <dosimetre>
                        ...
                    </dosimetre>
                    <dosimetre>
                        ...
                    </dosimetre>
                </dosimetres>
            </page>
            <page>
                ...
            </page>
            <page>
                ...
            </page>
            <page>
                ...
            </page>
        </pages>
    </bordereau>
    <bordereau>
        ...
    </bordereau>
    <bordereau>
        ...
    </bordereau>
<bordereaux>

問題の説明

私の主なレポートは、< bordereau > ノードで反復しています。
サブレポート (メイン レポート内) が < ページ > ノードで反復処理されており、「詳細セクション」の下部に改ページがあります。
(各 < dosimetre > ノードで反復する場合、サブレポート内のサブサブレポートですが、私の問題では重要ではありません)

私がする必要があるのは、メイン レポートの「ページ フッター」セクションで、< numpage > ノードの値を表示することです。

私がしたこと

各レポートに「numPage」という名前の変数を 1 つ追加しました。どちらも java.lang.String です。

  • 私のサブレポートには、「変数式」$F{numpage} があります。

  • 私のメインレポートのものは、「戻り値」プロパティのサブレポートによって最初のものにリンクされています

私が得るもの

メイン レポートは < bordereau > ノードで適切に反復されます。
サブレポートは < page >ノードで適切に反復されます。 サブレポート
の $F{numpage} フィールドを出力すると、それが表示されます。
サブレポートに変数 $V{numPage} を出力すると、それを見ることができます。

しかし、変数 $V{numPage} をメイン レポートに出力すると、最後の「< ページ > ノードの繰り返し」の値しか表示されず、それ以外の場合は適切でスムーズな「null」が表示されます。

どうすればいいのかわからない...変数の「リセットタイプ」で遊んで、テキストフィールドの「評価時間」で遊んでみました。しかし、すべての試みは効果がありませんでした...

またね

私は自分の問題をうまく説明できたと思います.私は英語のネイティブスピーカーではないので、下手な英語をお詫びします...私の英語は下手です...そして私は気分が悪いはずです!

助けてくれてありがとう。

ニコラス

4

2 に答える 2

1

これはしばらく尋ねられたことは知っていますが、同様の問題があります。フッターの「参照」を更新できるように、さまざまなサブレポートの戻り値を取得しようとしています。

これは、サブレポートからの「戻り値」がサブレポート全体が終了したときにのみ返されるため、それまで変数を使用できないためだと思います。

私はまだこれを回避する方法を見つけておらず、リセットの種類、計算の種類、および評価時間を試しました。

編集この問題に対して私が見つけた唯一の解決策は、カスタム スクリプトレットを作成することです。スクリプトレットをサブレポートに渡すことができます。クラスの同じインスタンスがサブレポートに渡されるため、テンプレートの作成中にいつでも値を設定および取得できます。

サブレポートからスクリプトレットでメソッドを呼び出すには、サブレポートで変数を定義し、式で次のようなことを行いました$P{SCRIPTLET}.setString("foo")。setString メソッドは、変数を設定できるように String を返す必要がありました。その後、マスター レポートで別のメソッドを呼び出して$P{REPORT_SCRIPTLET}.getString()、いつでも値を取得できます。

于 2014-06-30T14:01:11.170 に答える
0

ページ番号を取得しようとしていますか? はいの場合は、iReport パレットからメイン レポートのページ フッターにページ番号フィールドをドロップするだけです。

于 2012-12-11T06:58:19.647 に答える