【发布时间】:2014-06-21 13:02:50
【问题描述】:
假设我有一份报告,其中包含一些需要在执行前设置的参数。 如果我在 BIRT 查看器中执行报告,则会出现要求输入所需参数的弹出窗口。 我使用 BIRT API,我不想在我的应用程序中部署 BIRT 查看器。 如何在执行报告之前以编程方式获取需要设置的参数列表?
或者换一种说法,我怎样才能以编程方式知道,在执行之前应该设置哪些参数?
以及如何设置我从用户那里获得的报告值?
【问题讨论】:
假设我有一份报告,其中包含一些需要在执行前设置的参数。 如果我在 BIRT 查看器中执行报告,则会出现要求输入所需参数的弹出窗口。 我使用 BIRT API,我不想在我的应用程序中部署 BIRT 查看器。 如何在执行报告之前以编程方式获取需要设置的参数列表?
或者换一种说法,我怎样才能以编程方式知道,在执行之前应该设置哪些参数?
以及如何设置我从用户那里获得的报告值?
【问题讨论】:
我找到了以下决定。 我们应该定义一个单独的任务:
IGetParameterDefinitionTask taskGetParameters = engine
.createGetParameterDefinitionTask(design);
之后我们可以从这个任务中得到一个参数迭代器:
Collection params = taskGetParameters.getParameterDefns(true);
Iterator iter = params.iterator();
之后我们可以遍历参数并获取它们的属性。我正在获取在报告设计阶段定义的参数名称及其帮助文本,以及存储类型和默认值的位置:
while (iter.hasNext()) {
IParameterDefnBase param = (IParameterDefnBase) iter.next();
System.out.println(param.getName() + ": " + param.getHelpText());
}
然后我形成一个参数的Hashmap,key为name,value为value,传给IRunAndRenderTask:
HashMap<String, String> setParameters = new HashMap<String, String>();
//some code for adding parameters to the hashmap is here
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
task.setParameterValues(setParameters);
EXCELRenderOption options = new EXCELRenderOption();
options.setOutputFormat("csv");
options.setOutputFileName("output\\myxls.csv");
task.setRenderOption(options);
task.run();
task.close();
我省略了一些代码以避免这里出现大量文本,当然必须关闭引擎和所有 BIRT 资源以避免内存泄漏。
如您所见,重点是我们需要从一个任务中获取参数属性并传递给另一个任务。
我发现了一些提示here。
【讨论】: