BIRT引擎,Java应用程序和多值列表框以及where子句

时间:2014-07-07 20:55:28

标签: java birt

尝试在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中运行。

1 个答案:

答案 0 :(得分:0)

我们不能使用常规SQL参数&#39;?&#39;。 请参阅解决方法here,您必须在&#39;中进行构建。 beforeOpen数据集脚本中的子句

修改 此外,正如你得到的异常所提到的,你必须设置一个对象数组(例如一个字符串数组或一个整数数组,具体取决于报告参数的数据类型)一个字符串表示逗号分隔的值列表。这意味着如果java应用程序获得这样的String,则必须在将参数设置为引擎任务之前将其拆分为数组。