尝试在BIRT引擎API中接受多值列表框值时遇到一些问题。
我看到的错误是"The type of parameter "EmployeeType" is expected as "Object[]", not "java.lang.String".
我在beforeOpen子句中尝试了多种变体来让它正确地解析它们,但它在运行报告时总会返回相同的错误。
值所需的查询部分看起来像where pebempl_stgr_code in (?)
它应该只是逗号分隔值的列表,但它不起作用。我所做的所有搜索都会在2011年及之前出现问题,而且我的想法也是如此。
编辑:
在尝试的第一个onOpen脚本是这个
this.queryText=this.queryText.replace("placeHolder","where pebempl_stgr_code in ('" + params["employeeType"].value.join("','") + "')");
使用内置的Web查看器,但无法使用Engine API
然后尝试了这个的修改版本:
var parmcount = params["parmorders"].value.length
var whereclause = "";
if( parmcount > 0 ){
whereclause = " where customernumber in ( ";
}
for( i=0; i < parmcount; i++ ){
if( i == 0 ){
whereclause = whereclause + params["parmorders"].value[i];
}else{
whereclause = whereclause + " , " + params["parmorders"].value[i];
}
}
if( parmcount > 0 ){
this.queryText = this.queryText + whereclause + " ) ";
}
它的工作方式相同,在Web查看器中运行良好,但不会在Engine API中运行。
答案 0 :(得分:0)
我们不能使用常规SQL参数&#39;?&#39;。 请参阅解决方法here,您必须在&#39;中进行构建。 beforeOpen数据集脚本中的子句
修改强> 此外,正如你得到的异常所提到的,你必须设置一个对象数组(例如一个字符串数组或一个整数数组,具体取决于报告参数的数据类型)不一个字符串表示逗号分隔的值列表。这意味着如果java应用程序获得这样的String,则必须在将参数设置为引擎任务之前将其拆分为数组。