在BirtUpgrade到版本4.4.2期间生成PDF报告时出现问题

时间:2017-05-03 06:16:35

标签: java eclipse birt

我是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();

1 个答案:

答案 0 :(得分:0)

较新的BIRT版本缓存DataSet的结果。这意味着,如果报告再次使用相同的参数调用相同的DataSet,它将使用第一次调用的缓存结果。

也许您在BIRT报告中使用脚本化DataSet,或者在DataSet执行之间更改数据库中的值,或者动态更改DataSet的SQL。

这通常是一个很好的功能,但是如果DataSet的结果以某种方式依赖于X,请务必将X添加到DataSet的参数中!