2016-08-29 18 views
1

私はJasperReportsテンプレートを持っています。ここで、さまざまな "詳細バンド"の見出しを数える必要があります。見出し、タイトルを数えるために変数を増やす方法は?

ヘッドラインが変わることがあります(一部のデータセットは空白になり、バンド全体がレンダリングされません)ので、変数を使用したいと思います。

「detail_band_count」などがないため、ビルドイン変数はスイートではありません。

またバンド2 1つの詳細バンドに見出し、1つの又は10以下の詳細なバンドが存在することができ、常に存在しない - 10株は、バンド1

で宣言され、同じ見出ししかし、私が作成する管理がこの方法で変数。しかし、それはページを数えるだけです。

jasper_variable_count

変数アクセスの変数式をコールする可能性はありますか?だから、私は$V{headline_COUNT}と書いてすぐに増分しますか?

+1

"ヘッドライン"とは、columnHeaderとはどういう意味ですか?またはあなたがバンドに描いた線、さらにこの変数、レポートの終わりをどこで使う必要がありますか? –

+0

私のメインレポートに必要です。必要に応じてサブレポートがありますが、メインレポートはさまざまなヘッドラインを使用するディテールバンドで構成されています。見出しではタイトルを意味する。例えば1ユーザーデータ、2ユーザージョブ、3ユーザータイムライン.....しかし、ユーザーにジョブがない場合は、1ユーザーデータ、2ユーザータイムライン...となります。すべての見出しに変数を使用したい見出しのカウンター – Fl0R1D3R

答えて

2

incrementTypeを使用可能な値の1つに設定する必要があるため、変数を使用する方法がわかりにくい場合は、レポートを再構築し、グループ化戦略を見つける必要があります。 "ヘッダーライン"または同様のもの。

しかし、$P{REPORT_PARAMETERS_MAP}

定義しますが、パラメータマップを使用して、特定の要素が示されているどのように多くの時間をカウントするために使用できる回避策はありデフォルト値(NULLとして開始することを避けるため)を使用してカウントパラメータ

<parameter name="countReportElement" class="java.lang.Integer" isForPrompting="false"> 
    <defaultValueExpression><![CDATA[0]]></defaultValueExpression> 
</parameter> 

は、今あなたが数えるのが好き帯における任意のテキストフィールドまたは他の要素の上に、あなたはインクリメントこのパラメータには、偽のprintWhenExpression使用することができます

<reportElement x="0" y="262" width="320" height="25" uuid="8fa62997-ffa2-4777-923b-999d372ce09e"> 
    <printWhenExpression><![CDATA[($P{REPORT_PARAMETERS_MAP}.put("countReportElement",((Integer)$P{REPORT_PARAMETERS_MAP}.get("countReportElement"))+1))!=null?true:false]]></printWhenExpression> 
</reportElement> 

3進演算では常にtrueと評価されます(Map.put(K key, V value)は前のオブジェクトを返します)。要素が評価されるたびに1ずつ増分された値をパラメータマップに入れます。

表示あなたのカウント値は、直接パラメータマップにアクセスします。

<textField> 
    <reportElement x="57" y="13" width="100" height="20" uuid="7ca30577-0ca9-47c2-91ae-c7002fbbfbf7"/> 
    <textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get("countReportElement")]]></textFieldExpression> 
</textField> 

レポートには必ずevaluationTimeを設定してください。

+1

ありがとう、素晴らしい回避策! – Fl0R1D3R

+0

もう1つ:私はこの式を短い名前の変数に入れようとしました:$ P {REPORT_PARAMETERS_MAP} .get( "countReportElement") しかし、彼はcountReportElementを1回だけ増やして、もう一度増やすことはありません。あなたはそこで何が起こっているのか知っていますか? printWhenExpressionsが挿入されていますが、私は変数、任意のアイデアにparametermapを置くと明らかにfalseと評価されますか? – Fl0R1D3R

+0

変数はパラメータマップとは何の関係もありませんが、基本的にはパラメータマップを使用していますが、出力のevalutationTimeに注意する必要があるため、printWhenExpressionが評価され、textFieldが評価されるタイミングはいつですかマップからの値です。これはマップからリロードされないため、直接パラメータを使用しないでください(jasper-reportsはマップ内の初期オブジェクトを使用しますが、変更するとは思われません)。 –

関連する問題