【问题标题】:accessing parameters when writing a scripted BIRT data source in java在 java 中编写脚本化 BIRT 数据源时访问参数
【发布时间】:2009-09-24 20:00:54
【问题描述】:

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

干杯 锡

【问题讨论】:

    标签: java reporting birt


    【解决方案1】:

    最好通过报表设计中的 JavaScript 层使用基于 POJO 的脚本数据源。这使您可以访问报表上下文元素(如参数),并使您的 Java 对象成为不可知的数据提供者。

    这是我通常的设置方式:

    1) Java 层:

    1.1) 数据模型类:具有setter 和getter 的一类数据元素。这个类不做任何工作

    1.2) 控制器类:构建和维护数据模型类的实例数组。这是您将从报告层访问的类。这个类应该实现一个“action”方法(比如getRows(...)),它将接受你的参数并返回一个“rows”的ArrayList

    2) 报表层:

    2.1) 创建一个新的脚本数据源。

    2.1.1) 覆盖数据源上的“open”脚本以实例化您的控制器对象。代码将如下所示(这是您将参数值输入 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;
    

    这应该可以解决问题。祝你好运!

    【讨论】:

    • 我尝试了您的方法,但出现以下错误:无法在函数 __bm_FETCH() 中执行脚本。来源: ------ " + if(count
    • 我需要为 params["myParameter"] 定义一个单独的变量。
    • 对于未来的用户,“rows”变量可能会抛出异常,正如@PranavKumar 提到的使用 BIRT 最新版本(使用 v4.6.0 遇到异常),因为它似乎是最新版本的 BIRT 中的保留字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多