我正在使用脚本化POJO数据源进行BIRT报告,但无法访问报告参数。我用Java编写所有内容,而不是javascript。代码如下:
public class StockDataSetHandler extends ScriptedDataSetEventAdapter {
...
@Override
public void open(IDataSetInstance dataSet) {
count = 0;
StockDaoMock mockStockDao = new StockDaoMock();
//The code below works in javascript. How can I do the equivalent
//in Java? Where do I get params from?
String paramValue = params["myparameter"];
stockData = mockStockDao.getStockValues(paramValue);
}
}
BIRT的文件是指params集合。我如何在Java中掌握它?
干杯 锡
答案 0 :(得分:9)
最好通过报表设计中的JavaScript层使用基于POJO的脚本数据源。这使您可以访问报表上下文元素(如参数),并使Java对象保持不可知的数据提供者。
以下是我一般的设定方法:
1)Java Layer:
1.1)数据模型类:一类带有setter& amp;的数据元素。干将。这个类没有工作
1.2)Controller Class:构建并维护Data模型类的实例数组。这是您将从“报告”图层访问的类。这个类应该实现一个“action”方法(比如getRows(...)
),它接受你的参数并返回“rows”的 ArrayList 。
2)报告层:
2.1)创建一个新的脚本数据源。
2.1.1 )覆盖数据源上的“打开”脚本以实例化您的控制器对象。代码将如下所示(这是您将参数值引入Java层的方式):
// This will track your current row later on
count = 0;
// Create instance of the Controller class
controller = new Packages.com.your.package.path.DataSetController();
//Load the rows (Note here is where you are able to pass your parameter into the Java layer)
rows = controller.getRows(params["myParameter"]);
2.2)使用脚本数据源创建新数据集。
2.2.1)覆盖 fetch脚本以处理由控制器类构建的ArrayList。代码如下所示:
// Iterating over the ArrayList built by the Controller Class bound to the data source.
if(count < rows.size()){
// Set the column values on the data set off the values store in the Data model class.
row["product"] = rows.get(count).getProduct();
row["date"] = rows.get(count).getDate();
row["units"] = rows.get(count).getUnits();
count++;
return true;
}
return false;
这应该可以解决问题。祝你好运!