BIRT数据集为每个项目打印相同的数据

时间:2014-08-28 17:53:42

标签: birt

我有Maximo的BIRT报告,有两个脚本数据集。购买请求的主数据集和购买请求行的子数据集。问题是子数据集适用于单个购买请求并打印任何给定PR的正确数据,但如果您运行多个PR的报告,则打印出第一个PR的pr行每个PR。

所以我得到的是这样的。

PR 10

第1行

第2行

PR 20

第1行

第2行

当PR 20应该有10行时,它只给我两个,这两行是与PR 10相同的行。我已经设置报告打印出由数据集通过填充创建的SQL一个名为mySQL的全局变量,并在报表上打印。 SQL看起来很好,我可以剪切并粘贴到我的SQL编辑器中并获得正确的结果,但这不是在报告上打印出来的。我检查过表绑定,我试图将脚本中的数据设置为空,并强制它重新填充,但这没有效果。我创建了一个新的数据集,但新的数据集做了同样的事情。

有没有人遇到过这个?有什么想法可以检查什么?或者我该如何清除每个PR的数据集,以便每个PR的PRLINE数据集都是干净的?

这是数据集的打开脚本。

lineDataSet = MXReportDataSetProvider.create(this.getDataSource().getName(),         this.getName());
lineDataSet.open();

var sqlText = new String();

// Add query to sqlText variable.
sqlText = "select orderqty, orderunit, itemnum, description, unitcost, linecost, prnum,    prlinenum, refwo, assetnum, location, project,tasknum, siteid from maximo.prline_vw "
+ " where prnum = '" + rows[0]["prnum"].replace(/'/g,"''") + "'"
+ " and siteid = '" + rows[0]["siteid"] + "'"
//+ " where prnum = '" + row._outer["prnum"] + "'"
//+ " and siteid = '" + row._outer["siteid"] + "'"
// Include the Maximo where clause
//+ " and " + params["where"]
;

lineDataSet.setQuery(sqlText);

mySQL = sqlText;

这是获取脚本。

if (!lineDataSet.fetch())
return (false);

// Add a line for each output column
// The specific get method should match the data type of the output column.
row["prlinenum"] = lineDataSet.getString("prlinenum");  
row["orderqty"] = lineDataSet.getFloat("orderqty");
row["orderunit"] = lineDataSet.getString("orderunit");  
row["unitcost"] = lineDataSet.getFloat("unitcost");
row["linecost"] = lineDataSet.getFloat("linecost");
row["prnum"] = lineDataSet.getString("prnum");
row["itemnum"] = lineDataSet.getString("itemnum");
row["refwo"] = lineDataSet.getString("refwo");
row["siteid"] = lineDataSet.getString("siteid");
row["description"] = lineDataSet.getString("description");
row["project"] = lineDataSet.getString("project");
row["tasknum"] = lineDataSet.getString("tasknum");
row["assetnum"] = lineDataSet.getString("assetnum");
row["location"] = lineDataSet.getString("location");


return (true);

2 个答案:

答案 0 :(得分:0)

没有阅读细节:

这是一个常见原因,您的脚本数据集使用变量。 也就是说,结果取决于变量的值,但BIRT不知道这一点。 BIRT数据集结果缓存的工作方式取决于DS参数。 如果将全局变量作为DS参数添加到DS,则缓存机制知道结果取决于它并且您已完成。 如果没有,BIRT认为结果总是一样的。

答案 1 :(得分:0)

这似乎只有在我查看Eclipse BIRT开发人员的报告时才会发生。如果我将报告上传到工作环境并进行测试,它似乎工作正常。那么它必须与缓存脚本化数据源的方式以及开发人员如何处理它的方式有关?