BIRT报表母版页页眉页脚加动态文本报row未定义错误怎么办
BIRT母版页页眉页脚动态文本报错问题解答
核心结论
可以在BIRT母版页的页眉、页脚中插入动态文本,但你遇到的报错属于上下文作用域不匹配问题,无法直接复用报表主体内依赖row对象的表达式。
报错原因
"row" is not defined错误的本质是上下文对象缺失:
row是BIRT为绑定了数据集、聚合计算的组件(比如表、列表、报表主体页脚)单独注入的数据行对象,仅能在对应组件的数据绑定作用域内访问。- 母版页是全局公共模板,渲染流程早于报表主体的数据计算环节,本身不会自动注入报表数据行、聚合结果这类和具体报表内容绑定的对象,哪怕你把动态文本嵌套在网格组件中再放入母版页,依然处于母版页的全局作用域,拿不到
row对象。 - 相同表达式放在报表布局自身页脚可以正常运行,是因为报表主体页脚属于报表数据绑定作用域范围,能够正常访问聚合计算生成的
row对象。
可行解决方法
- 方法1:通过全局报表变量传值
- 在报表的
initialize脚本中声明全局存储变量:var footerAggValue = ""; - 在聚合组件的
onRender事件、或对应数据集的afterClose事件中,把计算完成的Aggregation结果赋值给该全局变量。 - 替换母版页页脚的动态文本表达式,改为读取全局变量,不再直接调用
row对象:
if( BirtComp.lessOrEqual( footerAggValue, "1,500.00" )){"user1.jpg"} else if (BirtComp.greaterThan(footerAggValue, "1,500.00")){ "user2.jpg"} - 在报表的
- 方法2:直接使用报表主体页脚实现需求
不需要强行把逻辑放到母版页,你已经测试通过的报表自身页脚方案本身就可用,只要给该页脚设置「每页重复显示」属性,展示效果和母版页页脚完全一致,还不需要额外处理作用域问题。 - 方法3:仅使用母版页原生支持的内置变量
如果是展示页码、总页数、报表名称这类全局属性,母版页可以直接访问BIRT内置的pageNumber、totalPage、reportName等变量,不需要依赖row对象,这类动态内容可以直接在母版页正常运行。
内容的提问来源于stack exchange,提问作者TheOx
相关产品推荐
相关产品推荐

