Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中编写脚本化BIRT数据源时访问参数_Java_Reporting_Birt - Fatal编程技术网

在java中编写脚本化BIRT数据源时访问参数

在java中编写脚本化BIRT数据源时访问参数,java,reporting,birt,Java,Reporting,Birt,我正在使用带有脚本POJO数据源的BIRT报告,访问报告参数时遇到问题。我用Java编写所有脚本,而不是javascript。代码如下: public class StockDataSetHandler extends ScriptedDataSetEventAdapter { ... @Override public void open(IDataSetInstance dataSet) { count = 0; StockDaoMock mockStockDao = new

我正在使用带有脚本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中获得它

干杯
Tin

在报告设计中,最好通过JavaScript层使用基于POJO的脚本化数据源。这使您能够访问诸如参数之类的报表上下文元素,并使Java对象保持不可知的数据提供程序

以下是我通常的设置方式:

1) Java层:

1.1)数据模型类:一类具有setter和getter的数据元素。这个班没有作业可做

1.2)控制器类:构建和维护数据模型类的实例数组。这是您将从报表层访问的类。这个类应该实现一个“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)重写获取脚本,以处理控制器类生成的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;
//迭代绑定到数据源的控制器类生成的ArrayList。
如果(计数

这应该能奏效。祝你好运

我尝试了您的方法,但出现以下错误:无法在函数_bm_FETCH()中执行脚本。源:-----“+if(count