使用Scripted Datasource创建自由格式BIRT报告

时间:2011-08-02 23:03:42

标签: java birt

我正在尝试创建一个免费的BIRT报告。该报告不包含在每行中具有相同columnNames的行中。

相反,它是一个自由形式的报告,它将具有以下形式。

"Name: {FirstName} {LastName}         Addess : {Address}
 Phone#  {Phone#}
....
....
"

我正在使用脚本化数据源,它实质上返回包含{FirstName,LastName,Address,Phone和其他字段}的名称值对的Map。

但我不知道如何设置变量以及如何获取FirstName,LastName等。 我应该尝试使用动态文本。

我不知道BIRT可以处理非行相关数据的任何方式。

这是我打开的数据集脚本。

open:

    util = new Packages.test.ReportsUtil();
    reportsVO = util.getReportVO("ABC");


in fetch:
    if(currentrow < totalrows) {
        dataSetRow["FirstName"] = reportsVO.getPropValue("identity.FirstName");
        dataSetRow["LastName"] = reportsVO.getPropValue("identity.LastName");    
        currentrow++;
    } else {
        return (false);
    }

但我不知道如何在主布局页面中访问FirstName和LastName。

谢谢

2 个答案:

答案 0 :(得分:0)

脚本化数据源的目标是允许您利用数据模型中固有的逻辑,并从操纵该数据的任何业务规则中受益。最后,它仍然希望将数据形成一个相当传统的基于行的集合。

您提到了动态文本,我认为这对基于Java的事件处理程序非常有用。您可以使用绑定到脚本数据源的Java对象中的逻辑,而不是绑定到报表生命周期中的事件,并以此方式获取非关系数据。

您甚至可以使用JS“Packages”构造直接从JavaScript事件处理程序调用Java对象(通过IDE更容易插入)。

有许多例子可以帮助您在BIRT Exchange完成这项工作。

答案 1 :(得分:0)

我做了类似的事情(BIRT 3.7),但我使用了行[“colName”]而不是dataSetRow [“colName”],这似乎有效。我将数据放在列表中,然后每个列表项都是一个网格。我将列表中的数据绑定设置为数据集。网格能够将值视为row [“colName”]。