【问题标题】:BIRT Engine, Java App, and multi value list box, and a where clauseBIRT Engine、Java App、多值列表框和where子句
【发布时间】:2014-07-07 20:55:28
【问题描述】:

在尝试获取要在 BIRT 引擎 API 中接受的多值列表框值时遇到一些问题。

我看到的错误是"The type of parameter "EmployeeType" is expected as "Object[]", not "java.lang.String".

我在 beforeOpen 子句中尝试了多种变体以使其正确解析这些内容,但在运行报告时它总是返回相同的错误。

查询的值需要去的部分看起来像where pebempl_stgr_code in (?)

它应该只是一个逗号分隔值的列表,但它不起作用。我所做的所有搜索都出现了 2011 年及之前的问题,我没有想法。

编辑:

第一个 beforeOpen 脚本尝试是这样的

this.queryText=this.queryText.replace("placeHolder","where pebempl_stgr_code in ('" + params["employeeType"].value.join("','") + "')");

在内置的网络查看器中工作,但不适用于引擎 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 中运行。

【问题讨论】:

    标签: java birt


    【解决方案1】:

    我们无法使用常规 SQL 参数“?”来执行此操作。 请查看解决方法here,您必须在数据集的 beforeOpen 脚本中构建这个“in”子句

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

    【讨论】:

    • 我试过了,但没有运气。我将使用我尝试过的 beforeOpen 脚本编辑帖子。
    • 又不走运了。我浏览了我的代码以确保它以数组的形式返回,看起来如果从视图中选择了多个项目,它会以[Ljava.lang.String; 的形式返回,但仍然会抛出错误消息。
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多