如何使用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访问并使用查询填充数据。
答案 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版本中。