我正在使用BIRT 4.8.0生成PDF和XLS报告,直接通过Java API调用引擎。现在,某些报告需要包含一个目录,而不是通过正常功能显示在Web查看器中,而是将目录手动输入到专用文本字段中,该字段在报告结构。该TOC文本元素实际上是在每个rptdesign使用的rptlibrary文件中定义的。
该机制的工作方式如下:
在库使用的Javascript文件中,我定义了包含目录(TOC)的自定义Java对象
将调用我的TOC对象,并将其逐渐填充到报表表的“ onCreate”脚本挂钩中。
在“ afterFactory”脚本中,我的TOC对象包含所有目录信息,我将其保存如下:
reportContext.setPersistentGlobalVariable(“ MYTOC”,petkosToc.getContent());
在专用文本字段的“ onRender”阶段,我读取了该持久性全局变量: reportContext.getPersistentGlobalVariable(“ MYTOC”)
问题:此MYTOC持久性全局变量为NULL! 显然,在afterFactory设置全局持久变量之前,已调用包含TOC的文本字段的“ onRender”阶段(我已通过调试确认)
现在,我使用IRunAndRenderTask运行引擎,我认为这是导致问题的原因,但是另一方面,我具有相同报表的旧报表生成实现,其中实际上与IRunAndRenderTask和报表一起使用全部包含其目录。此外,当我分割运行和渲染任务时,报告中的许多其他内容无法正确显示,因此在此阶段,我希望将报告更改降至最低。 有人可以帮助我发现为什么在afterFactory之前调用文本字段的onRender阶段吗?任何想法都将受到高度赞赏!