BIRT脚本通过Web浏览器不同的行为(Birt script behaves differentl

2019-09-21 19:09发布

我遇到运行通过网络一个BIRT报表的麻烦。 该报告的行为与预期在HTML中运行时,但某些脚本不通过web浏览器正常工作。 我有这个脚本在报告的“初始化”阶段运行(我知道,很多线路都没有neccessary,只是想确定我摆脱了任何可能的脚本语法错误):

var inc_number;
var inc_number_old;
var contador;
var grupo;
var proveedor;
var contador_no_encaminadas;
var contador_encaminadas;
var contador_cerradas;
var estado;
var cliente_nombre;
var cliente_apellido;
contador = 0;
contador_no_encaminadas = 0;
contador_encaminadas = 0;
contador_cerradas = 0;
inc_number_old = 0;

然后,我有一个表行下运行,同时触发的OnRender另一个小脚本:

inc_number =  row["Incident Number"];
grupo = row["Assigned Group"];
proveedor = row["Vendor Name"];
estado = row["Status"];
cliente_nombre = row["First Name"];
cliente_apellido = row["Last Name"];

if (inc_number != inc_number_old){

    contador++;

    if (proveedor != null && grupo != "SIGMA")
        contador_encaminadas++;

    if ((proveedor == null || proveedor == "") && (grupo == "SIGMA") && (estado != "Resolved" && estado != "Closed"))
        contador_no_encaminadas++;

    if (estado == "Resolved" || estado == "Closed")
        contador_cerradas++;
}   

inc_number_old = inc_number;

vars["contador_cerradas"] = contador_cerradas;
vars["contador_incidencias"] = contador;
vars["contador_no_encaminadas"] = contador_no_encaminadas;
vars["contador_encaminadas"] = contador_encaminadas;

正如你可能已经注意到了,这一切只是为了显示不同的组数的。 我在一个表中设置一些数据字段呼吁这个变量(最后四行以前的代码块),这样的报告显示,计数。 好了,通过预览选项卡在工作区中运行,或打在“运行”菜单中的HTML选项时,这一切完美的作品,但是当我尝试通过Web浏览器来运行它,所有的计数显示0(可能是默认变量的值)。 我会非常感激,如果有人可以给我在这一些帮助。 不知怎的,我得对细胞运行,过的OnRender其他一些脚本,这是确定的工作无论预览选项我选择。

附言:我使用BIRT V2.5.1的工作,我知道这是一个有点老,但它与BMC整合补救ARS唯一支持的版本,而这正是我需要它。 谢谢!!

Answer 1:

BIRT有“直接”输出和网络浏览器不同的不同的脚本流。 有两个报告的创建阶段:“一代”和“演讲”,看到BIRT事件流程图 。 在“直接”一代onCreateonRender事件被混合并通过生成阶段触发一起(的onCreate行1;行的OnRender 1;行的onCreate 2;的OnRender行2等)。 initialize脚本exeuted一次,之前的所有。

相反,网络浏览器已经分裂产生和呈现阶段:首先所有onCreate被执行,然后报告实际上是封闭的(认为“所有的脚本数据丢失”),那么所有onRender被执行。 initialize被执行两次,产生相(的onCreate)之前第一次,表示相位(的OnRender)之前第二次。 onRender可能无法获得row['...']变量,但有机会获得它的报告元素的属性,如this.foo

这是好事,在所有数据操作onCreate而非onRender脚本,因为脚本变量保存在一个一致的相位。 介绍,对于一些页面可能被中省略(我不知道),所以你可以在网页浏览器的页面之间跳转时有错误的结果。

如果你要通过产生和呈现阶段之间的一些数据,你必须将其存储在持久的全局变量

setPersistentGlobalVariable("name", value); //in generation phase
...
var value = getPersistentGlobalVariable("name"); //in presentation phase

没有必要来定义报表设计变量,只要使用上述功能。 只有一个小陷阱可以使用持久全局变量时可能遇到的 - 他们必须用Java序列化(这是不是有些Java数据类型的明显的特征)。



文章来源: Birt script behaves differently via web viewer
标签: birt