如何使用java代码访问报表中的元素

时间:2015-10-26 11:02:42

标签: java pentaho

如何使用Java访问.prpt文件中的每个元素?我需要检索,例如文本字段元素并用数据填充它。

我试过了:

public static void main(String[] args) {
    String reportPath = "file:/home/username/reports/example_table.prpt";
    try {
        ClassicEngineBoot.getInstance().start();
        ResourceManager resourceManager = new ResourceManager();
        resourceManager.registerDefaults();

        Resource resource = resourceManager.createDirectly(new URL(
                reportPath), MasterReport.class);
        MasterReport report = (MasterReport) resource.getResource();
        for(int i=0;i<report.getElementCount();i++){
        System.out.println("element :"+report.getElement(i));
        }
        System.out.println("Element count :" + report.getElementCount());

    } catch (Exception e) {
        e.printStackTrace();
    }

}

index变量是从report.getElementCount();

获取的元素数

输出结果为:

  

PageHeader = {name =&#34;&#34;,size =&#39;&#39;,layout = null}
      ReportHeader =(name =&#34;&#34;,size =&#39;&#39;,layout = null}
      DefaultGroup = {Name =&#39;&#39;,fields = []}

输出不显示.prpt文件中存在的任何文本字段等元素。 Will Gorman的书中没有任何关于此的例子。

以下是report-definition.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>
<data-definition xmlns="http://reporting.pentaho.org/namespaces/engine/classic/bundle/data/1.0">
<parameter-definition>
<list-parameter name="id" allow-multi-selection="false" strict-values="true" mandatory="true" type="java.lang.String" query="param_id_query" key-column="id" value-column="id">
  <attribute namespace="http://reporting.pentaho.org/namespaces/engine/parameter-attributes/core" name="role">user</attribute>
  <attribute namespace="http://reporting.pentaho.org/namespaces/engine/parameter-attributes/core" name="parameter-render-type">list</attribute>
  <attribute namespace="http://reporting.pentaho.org/namespaces/engine/parameter-attributes/core" name="re-evaluate-on-failed-values">false</attribute>
  <attribute namespace="http://reporting.pentaho.org/namespaces/engine/parameter-attributes/core" name="autofill-selection">false</attribute>
  <attribute namespace="http://reporting.pentaho.org/namespaces/engine/parameter-attributes/core" name="label">id</attribute>
  <attribute namespace="http://reporting.pentaho.org/namespaces/engine/parameter-attributes/core" name="hidden">false</attribute>
</list-parameter>
</parameter-definition>
</data-definition>

该报告包含2个文本字段,我尝试从java访问并使用查询填充数据。

1 个答案:

答案 0 :(得分:0)

Pentaho报告是一个树状的层次结构,MasterReport作为根元素。 getElement(i)只获取父元素的直接子元素。因此,您可能需要递归遍历所有元素。但是,应该有一个org.pentaho.reporting.engine.classic.core.util.AbstractStructureVisitor类,它会访问报告中的所有元素。您可以扩展它并将您的逻辑放入inspectElement(final ReportElement element),为每个访问过的元素调用的方法。 Link for source code of the class。 然后你可以用它的inspect(report)方法来完成所有的工作。但我不确定,如果这个类存在于3.6版本中。