我是Birt Engine的新手。我的任务之一是将Birt运行时升级到版本4.4.2。正在生成PDF报告,没有例外。
然而,PDF中存在大量数据不匹配。许多初始值在后续页面中重复出现。日志中没有例外。 PDF生成的正确数据最高可达Birt Runtime 3.7.0。
我不确定这个问题的根本原因是什么新技术。我没有看到运行时3.7.0和4.4.2之间的任何重大变化,因此我不确定为什么会发生这种情况。 无论如何,有人能指导我吗?
添加可能有帮助的部分代码。
我们初始化birt引擎的部分:
EngineConfig config = new EngineConfig();
String birtHome = ReportingProperties.getConstantString("BIRT_HOME");
ReportingServiceLogger.LOGGER.info("Setting BIRT Home: " + birtHome);
config.setEngineHome(birtHome);
config.setLogConfig(null, Level.ALL);
ReportingServiceLogger.LOGGER.info("Starting up platform");
Platform.startup(config);
ReportingServiceLogger.LOGGER.info("Platfor`enter code here`m started");
IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(
IReportEngineFactory.
EXTENSION_REPORT_ENGINE_FACTORY);
birtEngine = factory.createReportEngine(config);
birtEngine.changeLogLevel(Level.WARNING);
我们执行报告引擎的部分:
ReportingServiceLogger.LOGGER.info("Executing Report Using BIRT Engine");
design = birtEngine.openReportDesign(inputFilePath);
IRunAndRenderTask task = birtEngine.createRunAndRenderTask(design);
RenderOption options = null;
if (outputFormat.equalsIgnoreCase(ReportingProperties.OUTPUT_FORMAT_XLS)) {
options = BIRTEngine.renderOptionsXLS();
} else if (outputFormat.equalsIgnoreCase(IRenderOption.OUTPUT_FORMAT_PDF)) {
options = BIRTEngine.renderOptionsPDF();
} else if (outputFormat.equalsIgnoreCase(IRenderOption.OUTPUT_FORMAT_HTML) || outputFormat.equalsIgnoreCase(ReportingProperties.OUTPUT_FORMAT_CHART_IMAGE)) {
options = BIRTEngine.renderOptionsHTML(reportOutputFolder);
}
options.setOutputFileName(outputFilePath);
task.setRenderOption(options);
params.put("outputFormat", outputFormat);
task.setParameterValues(params);
ReportingServiceLogger.LOGGER.info("Run BIRT Task with outputpath : " + outputFilePath);
if (ReportingProperties.getConstantString("EXECUTION_ON_ERROR").equalsIgnoreCase("CANCEL")) {
task.setErrorHandlingOption(IRunAndRenderTask.CANCEL_ON_ERROR);
} else {
task.setErrorHandlingOption(
IRunAndRenderTask.CONTINUE_ON_ERROR);
}
task.run();
task.close();
答案 0 :(得分:0)
较新的BIRT版本缓存DataSet的结果。这意味着,如果报告再次使用相同的参数调用相同的DataSet,它将使用第一次调用的缓存结果。
也许您在BIRT报告中使用脚本化DataSet,或者在DataSet执行之间更改数据库中的值,或者动态更改DataSet的SQL。
这通常是一个很好的功能,但是如果DataSet的结果以某种方式依赖于X,请务必将X添加到DataSet的参数中!