Birt 脚本报错记录1

博客内容涉及Birt报告中遇到的空指针错误,通过排查确定问题在于data["REGION_NAME"]可能为空。讨论了数据引用方式、JavaScript中string和String类型的差异,并通过if判断解决了运行时错误。最终发现实际存在region_name为空的情况,指出测试系统的不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题表现如下 :

 
org.eclipse.birt.report.engine.api.EngineException: There are errors evaluating script "var region_name=data["REGION_NAME"]; /*if (region_name == null) "null"; else */ type= region_name.indexOf("市直")!=-1?"0":"1"; //region_name.toString().indexOf("市直")!=-1?"0":"1"; //var region_name=data["REGION_NAME"].toString(); // type= region_name.indexOf("市直")!=-1?"0":"1";": TypeError: Cannot call method "indexOf" of null (#6)


根据提示可初步确定问题为 空指针指向 错误。即,data["REGION_NAME"] 可能为空


1)data["column"]引用方式有问题 

因为是交叉表,想可能和普通的表的使用方式不太一样。参照对参数求值的方法。自创data["column"].value;

结果时不行的,肯定不能去这样使用。

同时列绑定呢,也肯定是没啥问题的 。所以数据列应该是没问题的。

2)data["column"] 返回值有问题结果导致 indexOf 调用时报错

使用typeof 确定了下数据类型,是string 类型。

同时呢补习了下 javascript 下 string 和String 的区别。string 这个类型是不存在的,只有两种形式的字符串

var 形式定义的字符串。还有就是 String 对象了。

至于加不加 toString() 对象去转换,是没有啥区别的,不管怎么着都是 string。不知道 Birt 的返回形式好像和 javascript或的typeof返回貌似有点出入。

3)无奈之下,果断加了个 if 判断是否为空。(潜意识认为 region_name 是不可能为空的)

果断运行成功了,纳闷。

运行成功后,发现竟然有 region_name 为空的。。。。。。。。。。。。。。。。。。


浪费了哥一上午的时间,一上午!!!!!!

垃圾的测试系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值