2012-05-01 2 views
9

私は自分のiReportに自然にデータセットを持っているテーブルを持っていて、テーブルのデータセットで定義され、初期化されている変数を持っています。使用したい値(テーブル外のスコープ内です。テーブルを保持している私のメインレポートに。テーブルのデータソースからiReportのメインレポートに値を返す方法は?

どうすればいいですか?

答えて

1

これは合理的だと思いますが、可能かどうかはわかりません。これは有用な拡張要求である可能性があります。

代わりに、サブレポートを使用することもできます。サブレポートではテーブル内で可能なものはすべて可能です。サブレポートには戻り値があり、必要な情報を返すことができます。

+1

回答ありがとうございました。 iReport IDE開発チームにとっては「引用すると便利な拡張要求になるかもしれません。もちろん、サブレポートはメインレポートに値を返すことができます。それも一方通行です。しかし、私はテーブルからメインレポートに値を返す方法があればいいと思ったのですか?もし誰かが私が求めているものについてさらに詳しいアイデアを持っていたら、どうか? – yayayokoho3

0

テーブルのデータセットからメインレポートに変数を返すことはできませんが、逆も可能です。オルタナティブは、mdahlmanの示唆に従うことができます。代わりにサブレポートを使用してください。

10

テーブルデータセットからいくつかのデータを取得する場合は、実際にこれを行うことができます。私はこれを達成するために汚いトリックを見つけました。

  1. 使用して、メインレポートからテーブルデータセット内の変数と

  2. リンクデータセットパラメータをタイプjava.util.MapのPARAMETER parameterMapNameを作成し、メインレポートにタイプjava.util.MapのVARIABLE variableMapNameを作成し、表現new java.util.HashMap()

  3. でそれを初期化します"テーブルのデータソースを編集 - >パラメータ - >追加 - > $ P {parameterMapName} = $ V {variableMapName}"(のテーブルを右クリックメインレポートテンプレート)

  4. java.lang.Stringの変数putResultをテーブルデータソースに作成します。この変数意志のための式は、この

$P{parameterMapName}.put("KEY", $F{fieldYouWantReturn}) + $P{parameterMapName}.put("KEY2", $F{otherFieldYouWantReturn})

のように見える今、あなたは$V{variableMapName}.get("KEY")

を使用することにより、メインレポートのテーブルデータソースからのデータを使用する能力を持っている、それは本当に汚いハックですが、時には他に何かをする方法がありません。 ありがとう!

+2

この解決策を試しても機能しませんでした。テーブルの作成前に行われた印刷メソッドにテーブルが生成された後、putResultがどのようにデータを送信するかを見ることができません。 –

+1

正常に動作します。アイデアをくれてありがとう。 – swemon

0

これで、テーブルのデータセットからメインレポートに値を戻すことができます。

jasper studio 6.0.1,Iには、tableのdatasetという名前のプロパティがあり、戻り値が設定されています。しかし、セットに入ると、私はフォーム "戻り値を構成する"が間違っている、ジャスパースタジオが間違って "変数から変数に"、stuioは2つの変数を逆になることがわかった。 "変数から"はテーブルのローカル変数です。 "値は"メインレポート変数です。あなたはソースで手作業で削除しなければなりません。"incrementerFactoryClass=""".

私はテストします。元のレポートに戻り値が出力されます。

次は私のjrxmlの一部です。

<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"> 
 
\t \t \t \t \t <datasetRun subDataset="workscore" uuid="307278bc-db98-4de2-9b50-dea5dc69b496"> 
 
\t \t \t \t \t \t <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
 
\t \t \t \t \t \t <returnValue fromVariable="returnscore" toVariable="workscore"/> 
 
\t \t \t \t \t </datasetRun>

0

地図のためにそれを入力して残りのメインレポートにテーブルセットから値を返す任意の型が不可能であることも可能です。

値を返すオプションがあるので、サブレポートを使用できますが、可能であれば、テーブルの代わりにサブレポートを使用してみてください。 subDatasetを使用してコンポーネントから値を返す

4

正しい方法(ジャスパーレポートV.5/V.6)は、変数を使用し、両方のメインレポートおよびsubDatasetで変数を定義することです。メインレポートの

(メインレポートにテーブルのレコード数を返す)

  1. subdatasetにおいて可変

    <variable name="TABLE_COUNT" class="java.lang.Integer" resetType="None"> 
        <initialValueExpression><![CDATA[0]]></initialValueExpression> 
    </variable> 
    
  2. を定義する例では(変数でビルド変数を定義使用されます$V{REPORT_COUNT})。 datasetRun

  3. subDatasetが変数(fromVariable) がTABLE_COUNT変数は、メインレポートで使用することができます(toVariable

    <datasetRun subDataset="tableData" uuid="fa5df3de-f4c5-4bfc-8274-bd064e8b81e6"> 
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
        <returnValue fromVariable="REPORT_COUNT" toVariable="TABLE_COUNT"/> 
    </datasetRun> 
    

たメインレポート変数に戻るべきであるかを示す、ちょうど覚えて正しく設定するにはevaluationTime

値を表示する(本文中)

<textField evaluationTime="Report"> 
    <reportElement x="0" y="0" width="100" height="20" uuid="d67ddb3e-b0cc-4fae-9e05-f40eb0f7e059"/> 
    <textFieldExpression><![CDATA[$V{TABLE_COUNT}]]></textFieldExpression> 
</textField> 
+2

非常に良い答え:) –

関連する問題