我有一份使用脚本数据源的BIRT报告。该报告有一个参数,它是XML文件的路径。 XML包含Java对象的表示。该对象被反序列化,并通过脚本化数据源提供给报告。
'开放'脚本:
importPackage(Packages.com.acme.atf.model.dao);
model = new Packages.com.acme.atf.model.dao.AtfObjects();
path = inputParams["ProtocolPath"];
try {
var list = model.getProtocols(path);
itr = list.iterator();
}catch(e){
log(e);
}
'fetch'脚本:
try {
if(itr.hasNext()){
p = itr.next();
row["ProtocolObject"] = p;
row["ProductVersion"] = p.getProductVersion();
row["ProductName_de"] = p.getProductName_de();
row["ProductName_en"] = p.getProductName_en();
// etc.
return true;
}
} catch(x) {
log(x);
}
return false;
如果我只是在体内使用DataSet,那么我得到一个结果。创建报告。
如果我将数据绑定网格添加到母版页标题以显示ProductName
字段,则报告未正确生成。如果删除母版页中的数据项,则会正确生成报告。
似乎首先创建母版页,这可能会阻止正文中的数据集正确生成。
我发错了吗?我可以将数据绑定项添加到母版页吗?
答案 0 :(得分:0)
问题实际上与以下事实有关:如果您多次使用数据集,BIRT会开始缓存结果并使用序列化。我使用的POJO不是完全可序列化的(其中一个封闭的类),因此在反序列化时为null。这导致了这个问题。
我实际上得到了另一个问题的答案。见What might cause BIRT to lose an object reference between fetch and render?