BIRT之前开盘价值列表参数错误

时间:2014-02-05 22:15:00

标签: birt

我有一个(半)基本数据立方体设置与状态和区域的级联参数。状态选择框和区域一样直截了当;当用户选择状态时,相应地设置区域选项。但是,Area的值是一个很长的字符串列表,它将被发送到mysql select语句,该语句将使用params(State和来自Area的字符串列表)几次。它是一个丑陋的UNIONS系列。我的问题介于开始和查询时间之间。

//beforeOpen script...LState & LAreas the name of the report param
this.queryText = this.queryText.replace('stateList', params["LStates"].value);
this.queryText = this.queryText.replace('areaList', params["LAreas"].value);


In my mysql statement I use them in the following way:
SELECT ..XXX..
FROM ..XXX..
WHERE ..XXX..
State.State_Location in ('stateList')
AND Range_Locator.Range in ('areaList')
UNION ALL
SELECT ..XXX..
FROM ..XXX..
WHERE ..XXX..
State.State_Location in ('stateList')
AND Range_Locator.Range in ('areaList')

我从BIRT得到的两个错误是:

(非常明显)

  • 无法获取结果集。 org.eclipse .... SQL语句不返回ResultSet对象。

(对我来说不太明显)

  • 发生BIRT异常。评估Javascript表达式时出错。脚本引擎错误:找不到方法java.lang.String.replace(string.java.lang.Object [])。 有错误评估脚本“this.queryText = this.queryText.replace('stateList',params [”LStates“]。value); this.queryText = this.queryText.replace('areaList',params [”LAreas“] 。值);”

有什么想法吗?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

似乎LStates被定义为“多值”参数,因此params [“LStates”]。value返回一个值数组:这就是为什么这个替换方法不起作用。

你应该这样试试:

this.queryText = this.queryText.replace('stateList', params["LStates"].value.join("','"));

答案 1 :(得分:0)

我不确定你在beforeOpen脚本中做了什么,但你的SQL正在寻找字符串值'stateList'& 'areaList'并且可能对()不满意。您需要使用问号来调用您在数据集设计中设置的“参数”中定义的参数。

SELECT ..XXX..
FROM ..XXX..
WHERE ..XXX..
State.State_Location in ?
AND Range_Locator.Range in ?
UNION ALL
SELECT ..XXX..
FROM ..XXX..
WHERE ..XXX..
State.State_Location in ?
AND Range_Locator.Range in ?

我不记得使用

 in ?

在任何查询中,我通常会尝试将其设置为使用

like ?

通过BIRT向SQL发送多项选择参数存在许多问题。你可能想看看How do I set a parameter to a list of values in a BIRT report?还有一些安全问题。当我必须过滤倍数时,我通常在SQL运行后在过滤器(数据集设计选项)中进行过滤。如果您的SQL返回大量值,则认为这可能是资源问题。

答案 2 :(得分:0)

感谢您的回复,但由于我无法让这些选项工作,我最终重组了数据库& sql语句运行得更好。要解决以前的一些建议:

@dom states参数只有一个值,而使用“IN('stateList')”效率不高(免责声明,而不是我的代码),添加.join(',')确实抛出了一个特定的错误;我试过,mysql / BIRT似乎期待一个以逗号分隔的列表,但得到一个带有逗号的尾随字符串。

@James我尝试使用问号(?)代替'stateList'& 'areaList',但我认为mysql / BIRT无法识别哪个值带有哪个问号...不太确定,因为我无法调试得足够好并找出原因。可能是一个我没注意到的param映射问题的表单。谢谢你的帮助。