访问BIRT报告中的详细信息部分的内容

时间:2013-05-31 13:42:46

标签: birt

我正在使用BIRT报告,在xml formate中生成它我正在编写发射器(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方法的代码。

    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());
        }

    }

}

我可以使用此逻辑访问Cell及其所有文本内容。但我想对List的Details部分中Table的所有单元格做同样的事情。 问题是详细信息部分中的单元格在ICellContent.getChildren()上为null。

是的,我的startText方法根本没有被调用。以下是我的发言人的声明,

公共类XmlEmittor扩展了ContentEmitterAdapter {...}

以下是rptDesign结构,

<List>
    <Header>
           <Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
    </Header>
    <Detail>
           <Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
    </Detail>
</List>

在上面的结构中我的文本元素本身是用XML结构引导我想生成报告。所以我只想附加我的xml的所有内容并将其写入outputstream。请提醒,提前致谢

1 个答案:

答案 0 :(得分:0)

如果是 Text 元素,

public void startText(ITextContent text) 

public void startData(IDataContent data) throws BirtException

将被调用但是动态文本元素

public void startForeign(IForeignContent foreign) throws BirtException

将被召唤。

您可以使用以下代码段来获取动态文本值

@Override
public void startForeign(IForeignContent foreign) throws BirtException {        
    Object rawValue = foreign.getRawValue();    
}