私はエミッター(BIRTプラグイン)を書いているxml形式で生成するために、BIRTレポートを使用しています。同じレポートのいくつかのセクションに基づいて、いくつかの繰り返しセクションを含む xml レポートが必要です。そのためにsubReportsを使用しています。したがって、レポート構造は次のようになります
List--
Header--
Table---(No header and footer)
details---
Cell----
Text(Multiple text here) Some static section and dynamic data
List Details ----
Table--(No header and footer)(This table will be repeated for every record in the header part)
Details--
Cell --
Multiple Text elements ()`
List Footer---- Empty
エミッターを書いているので、主に Cell 要素にあるすべてのテキスト要素のコンテンツを抽出する必要があります。以下は、sartCell メソッドの My エミッターのコードです。
public void startCell(ICellContent arg0) {
System.out.println("text in Cell:: ");
System.out.println("text in Cell:: " + arg0.getInstanceID());
for(Object ie : arg0.getChildren())
{
if(ie instanceof LabelContent)
{
LabelContent lc = (LabelContent)ie;
stringBuilder.append(lc.getText());
System.out.println(lc.getText());
}
else if(ie instanceof ForeignContent)
{
ForeignContent fc = (ForeignContent)ie;
stringBuilder.append(fc.getRawValue());
System.out.println(fc.getRawValue());
}
}
}
このロジックを使用して、セルとそのすべてのテキスト コンテンツにアクセスできます。しかし、リストの詳細セクションにあるテーブルのすべてのセルで同じことをしたいと思います。問題は、詳細セクションのセルが ICellContent.getChildren() で null を与えていることです。
はい、私の startText メソッドはまったく呼び出されていません。以下は、私のエミッターの宣言です。
public class XmlEmittor extends ContentEmitterAdapter {...}
以下は、rptDesign 構造体です。
<List>
<Header>
<Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
</Header>
<Detail>
<Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
</Detail>
</List>
上記の構造では、テキスト要素自体は、レポートを生成したい XML 構造で感じられます。そのため、xml のすべてのコンテンツを追加して、出力ストリームに書き込みたいだけです。提案してください、事前に感謝します