最好通过报表设计中的 JavaScript 层使用基于 POJO 的脚本数据源。这使您可以访问诸如参数之类的报表上下文元素,并使您的 Java 对象保持与数据提供者无关。
以下是我通常的设置方式:
1)Java层:
1.1) 数据模型类:具有setter & getter 的一类数据元素。这个班级没有完成任何工作
1.2)控制器类:构建和维护数据模型类的实例数组。这是您将从报告层访问的类。此类应实现一个“动作”方法(如getRows(...)
),该方法将接受您的参数并返回“行”的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;
这应该够了吧。祝你好运!