当前位置: 首页 > 面试题库 >

多个参数值

卫弘义
2023-03-14
问题内容

当我尝试从报表参数传递多个值时,BIRT存在问题。

我正在使用BIRT 2.6.2和Eclipse。

我正在尝试从级联参数组的最后一个参数“ JDSuser”中放入多个值。该参数允许具有多个值,并且我正在使用列表框。

为了能够做到这一点,我正在用where-in语句编写我的sql查询,其中我用javascript替换了文本。否则BIRT
sql无法从report参数获取多个值。

我的SQL查询是

select jamacomment.createdDate, jamacomment.scopeId,
jamacomment.commentText, jamacomment.documentId,
jamacomment.highlightQuote, jamacomment.organizationId,
jamacomment.userId, 
organization.id, organization.name,
userbase.id, userbase.firstName, userbase.lastName,
userbase.organization, userbase.userName,
document.id, document.name, document.description,
user_role.userId, user_role.roleId,
role.id, role.name

from jamacomment jamacomment left join
userbase on userbase.id=jamacomment.userId
left join organization on
organization.id=jamacomment.organizationId
left join document on
document.id=jamacomment.documentId
left join user_role on
user_role.userId=userbase.id
right join role on
role.id=user_role.roleId

where jamacomment.scopeId=11
and role.name in ( 'sample grupa' )
and userbase.userName in ( 'sample' )

而我的JavaScript代码在beforeOpen状态下的数据集是:

if( params["JDSuser"].value[0] != "(All Users)" ){
this.queryText=this.queryText.replaceAll('sample grupa', params["JDSgroup"]);
var users = params["JDSuser"];
//var userquery = "'";
var userquery = userquery + users.join("', '");
//userquery = userquery + "'";
this.queryText=this.queryText.replaceAll('sample', userquery);
}

我尝试了许多不同的报价变体,使用此变体我没有收到错误消息,但是如果我选择1个值,则不会从数据库中获得任何数据,但是如果我选择至少2个值,则将得到最后一个选择的值数据。

如果我取消注释那些其他引号脚本行之一,则将出现如下语法错误:

以下各项有错误:表(id =
597):+处理期间发生异常。有关详细信息,请参见以下消息:无法为数据集准备查询执行:组织无法获取结果集元数据。org.eclipse.birt.report.data.oda.jdbc.JDBCException:SQL语句不返回ResultSet对象。SQL错误#1:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第25行的’rudolfs.sviklis’,’sample’)’附近使用正确的语法;com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第25行的’rudolfs.sviklis’,’sample’)’附近使用正确的语法

另外,我应该告诉您,我正在通过工作示例进行了解。一切都一样,前面的代码导致了相同的语法错误,我将其更改为执行相同操作的脚本。该示例位于此处:http :
//developer.actuate.com/community/forum/index.php?/files/file/593-default-
value-all-with-multi-select-
parsmeter/

如果有人至少可以给我提供我应该做什么的线索,那就太好了。


问题答案:

您应该始终使用参数的value属性,即:

var users = params["JDSuser"].value;

不必在“ userquery”两边加上引号,因为这些引号已放在SQL查询的“样本”中。此外,还有一个错误,因为尚未在以下行定义userquery:

var userquery = userquery + users.join("', '");

这可能会在查询中引入诸如“ null”的字符串。因此,删除对userquery变量的所有引用,只需在末尾使用此表达式即可:

this.queryText=this.queryText.replaceAll('sample', users.join("','"));

注意,我删除了连接表达式中的空格。最后,一旦运行良好,您可能需要通过测试该值是否为null来使报表输入更可靠:

if( params["JDSuser"].value!=null && params["JDSuser"].value[0] != "(All Users)" ){
  //Do stuff...

}


 类似资料:
  • 问题内容: 我读了与该错误有关的其他线程,似乎我的问题与到目前为止所读的所有帖子都存在有趣的明显区别,即,到目前为止,所有其他帖子在创建一个用户方面都存在错误类或内置系统资源。调用函数时遇到此问题,我无法弄清楚它的用途。有任何想法吗? 错误信息: 问题答案: 当指定关键字参数覆盖位置参数时,会发生这种情况。例如,让我们想象一个绘制彩色框的函数。该函数选择要使用的颜色,并将框的图形委托给另一个函数,

  • 问题内容: 假设我有这个功能: 我想这样称呼它: 当然,不能用这种方法来完成,因为Postgres试图用该名称和三个不存在的参数来查找函数。 我试图用引号引起来,但在这种情况下,参数解释错误: data1’,’data2’,’data3 ,就像一个字符串一样。 有没有一种方法可以在参数中放置多个值,以便IN子句可以识别它? 问题答案: 您的函数将不会被创建。之后是句法废话。 无论哪种方式,带有 参

  • 问题内容: 我最近一直在复制和移动大量文件(约40万个)。我知道在Bash命令行上可以扩展的参数数量有限制,因此我一直在使用xargs来限制产生的数量。 出于好奇,我想知道我可以使用的最大参数数目是多少,我发现这篇文章说它是依赖于系统的,我可以运行以下命令来找出: 令我惊讶的是,我回来的答案是: 刚刚超过 260万 。正如我所说,我要处理的文件数量要少得多,大约为40万。我绝对需要使用移动和复制这

  • 问题内容: 我有一个源输入 input.txt 我想将这些输入馈入程序,如下所示: 所以我尝试使用 xargs ,但是没有运气。 它给 但我想要 任何的想法? 问题答案: 到目前为止给出的解决方案都无法正确处理包含空格的文件名。如果文件名包含“或”,有些甚至会失败。如果输入文件是由用户生成的,则应该准备好使用令人惊讶的文件名。 GNU Parallel 很好地处理了这些文件名,并为您(至少)提供了

  • 问题内容: 我想为一组SQL查询创建一个过滤器,以便用户最多可以通过三个值过滤SQL SELECT。用户界面具有三个文本框,每个文本框都将绑定到SQL表中的列名。用户可以通过这些文本框提供一个,两个或三个条件。 到目前为止,这就是我所拥有的。我知道这些声明将不起作用,但是我找不到解决该问题的方法。(使用不会返回任何结果。 问题答案: 如果我正确遵循,您想根据所有填充变量过滤结果,以处理未填充变量,

  • 我是Node.js和Express的新手,我一直在做一个RESTful API项目,我试图在URL中发送一个带有多个参数的GET请求: 这是我的路线: 我是这样称呼它的: 而且我也尝试过 它最终会走这条路线: 那么,我写endpoint的方式是否错误?还是我要求的方式?