为什么在“ afterFactory”代码(生成阶段)之前执行文本元素的“ onRender”代码(表示阶段)?

时间:2019-06-16 15:07:27

标签: java birt birt-deapi

我正在使用BIRT 4.8.0生成PDF和XLS报告,直接通过Java API调用引擎。现在,某些报告需要包含一个目录,而不是通过正常功能显示在Web查看器中,而是将目录手动输入到专用文本字段中,该字段在报告结构。该TOC文本元素实际上是在每个rptdesign使用的rptlibrary文件中定义的。

该机制的工作方式如下:

  1. 在库使用的Javascript文件中,我定义了包含目录(TOC)的自定义Java对象

  2. 将调用我的TOC对象,并将其逐渐填充到报表表的“ onCreate”脚本挂钩中。

  3. 在“ afterFactory”脚本中,我的TOC对象包含所有目录信息,我将其保存如下:

    reportContext.setPersistentGlobalVariable(“ MYTOC”,petkosToc.getContent());

  4. 在专用文本字段的“ onRender”阶段,我读取了该持久性全局变量: reportContext.getPersistentGlobalVariable(“ MYTOC”)

  5. 问题:此MYTOC持久性全局变量为NULL! 显然,在afterFactory设置全局持久变量之前,已调用包含TOC的文本字段的“ onRender”阶段(我已通过调试确认)

现在,我使用IRunAndRenderTask运行引擎,我认为这是导致问题的原因,但是另一方面,我具有相同报表的旧报表生成实现,其中实际上与IRunAndRenderTask和报表一起使用全部包含其目录。此外,当我分割运行和渲染任务时,报告中的许多其他内容无法正确显示,因此在此阶段,我希望将报告更改降至最低。 有人可以帮助我发现为什么在afterFactory之前调用文本字段的onRender阶段吗?任何想法都将受到高度赞赏!

0 个答案:

没有答案