我正在将BIRT报告从版本2.6迁移到4.4,并面临一个非常奇怪的问题,如
作为查询的一部分传递的BIRT参数被舍入,即如果我将1作为参数传递,则查询执行为0,如果我将参数传递为99或101,则查询将执行100
查询 - 从table1中选择数据,其中actualID =?;
参数的数据类型是十进制(28,0)
使用的数据库是SQL Server 2012
我在BIRT函数中记录了参数的值(beforeOpen,beforeClose等),并且它总是显示与我传递的参数值一致的参数值。
请帮助我理解或指出我可以进一步调查的方向
非常感谢任何帮助
请注意 如果我将数据类型从Decimal转换为String,它可以正常工作 如果我将参数作为Query的一部分传递它工作正常但是当参数值动态替换'?'时它不起作用在查询中
答案 0 :(得分:0)
您还应该在afterOpen事件中记录参数值。 也许他们在beforeOpen事件中以某种方式被修改。 在我的BIRT框架中,我定义了一个这样的函数:
afterOpen: function(ds) {
log.debug("afterOpen DS " + ds.getName() + " inputParams=" + ds.getInputParameters().toString());
}
此函数可以作为trace.afterOpen调用。 然后我可以在数据集的afterOpen事件中使用它,如下所示:
trace.afterOpen(this);
你也可以将BIRT的内部记录设置为FINEST;这将产生大量的调试消息,并应包括每个执行AFAIK的SQL语句的绑定变量。