【问题标题】:Using Javascript reportContext.setPersistentGlobalVariable method on Birt handlers To pass objects between processes在 Birt 处理程序上使用 Javascript reportContext.setPersistentGlobalVariable 方法在进程之间传递对象
【发布时间】:2015-03-10 08:55:17
【问题描述】:

我试图将变量从工厂进程传递到运行进程, 在 eclipsde UI 透视图中使用 reportContext.setPersistentGlobalVariable。 在数据集的 onFetch() 中,代码如下所示:

var flag = "hello";
reportContext.setPersistentGlobalVariable("flag", flag);

在报表设计的 beforeRender() 方法中,代码如下所示:

var flg = reportContext.getPersistentGlobalVariable("flag");
reportContext.getDesignHandle().findElement("text").setContent(flg);

需要注意的是,当我将两个 sn-ps 放在报表设计的两个 on..() 方法中时,此代码是有效的。 不知何故,数据没有在两个进程之间传递。

【问题讨论】:

    标签: javascript eclipse birt


    【解决方案1】:

    我能够重现类似于您描述的行为。请尝试在报告末尾插入动态文本元素并设置此表达式,它应该可以工作:

    reportContext.getPersistentGlobalVariable("flag");
    

    您的报表很可能正在运行一个独特的“RunAndRender”任务,而如果我们想利用 beforeRender 和 onRender 事件,我们应该使用两个单独的“Run”和“Render”任务。

    在使用 Eclipse Designer 的实践中,如果我们使用 Web 查看器(“在 Web 查看器中查看报表”)运行报表,则有两个单独的任务,但如果我们直接运行导出(“查看报表为 xxx”),则只有一个任务。

    也就是说,重要的是要注意处理渲染事件是很棘手的:大多数情况下,当您在这里尝试更改 designHandle 元素时为时已晚。例如,即使是元素的“可见性”属性也不能在渲染时更改。您可以使用此元素的“onRender”事件更改文本的内容:

    this.text=reportContext.getPersistentGlobalVariable("flag");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-05
      • 2014-08-25
      • 2014-10-12
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多