在 BIRT 中输入参数后更新数据集查询
Updating Data Set query after parameter input in BIRT
如何在 BIRT 报表设计中传递参数后更改或更新数据集的查询?
细节:
我有一个看起来像这样的查询:
WHERE ?
那个参数标记可以保存不同的值,用户输入参数后,它看起来像这样例如:
WHERE column_name = 1
或
WHERE column_name = 2
甚至
WHERE column_name IN (1,2)
我为该数据集参数 (DSP) 创建了一个报告参数 (RP),尝试了几个小时后,我无法更改它。
我试过了:
- 在 RP 和 DSP 上创建各种 javascript 表达式
- 创建将更改第一个 RP 的值并返回上一步的 RP
- 编辑 属性 绑定,但我不知道应该如何完成。
澄清一下,我正在设计一个报告,而不是将运行时集成到现有应用程序中。
我希望这已经足够清楚了,我仍在编辑问题,所以如果您需要更多信息,请告诉我。
谢谢
假设您使用的是 Oracle 数据库(其他系统的行为可能不同),您应该知道绑定变量(在 JDBC 语音中:问号)可以替换 标量仅值,例如字符串或数字。
但是您需要像 列表 这样的数字作为输入。
因此在这种情况下绑定变量对您没有帮助。
可能实现您想要的最简单方法是:
在您的查询中,写:
WHERE column_name in (1) -- $REPLACE_THIS$
请注意,我在查询中使用评论作为标记。
然后,在查询的 beforeOpen
事件中,像这样修改查询文本:
// construct a comma-separated string representation of your list
// based on your report parameter (exercise left to the reader)
// var replacement = my_to_sql_csv(params["my_report_parameter"].value);
// for demonstration use:
var replacement = "1,2";
// modify the `IN` expression inside the SQL
this.queryText = this.queryText.replaceAll("(1) -- $REPLACE_THIS$", "(" + replacement + ")";
就是这样。
如何在 BIRT 报表设计中传递参数后更改或更新数据集的查询?
细节:
我有一个看起来像这样的查询:
WHERE ?
那个参数标记可以保存不同的值,用户输入参数后,它看起来像这样例如:
WHERE column_name = 1
或
WHERE column_name = 2
甚至
WHERE column_name IN (1,2)
我为该数据集参数 (DSP) 创建了一个报告参数 (RP),尝试了几个小时后,我无法更改它。
我试过了:
- 在 RP 和 DSP 上创建各种 javascript 表达式
- 创建将更改第一个 RP 的值并返回上一步的 RP
- 编辑 属性 绑定,但我不知道应该如何完成。 澄清一下,我正在设计一个报告,而不是将运行时集成到现有应用程序中。 我希望这已经足够清楚了,我仍在编辑问题,所以如果您需要更多信息,请告诉我。
谢谢
假设您使用的是 Oracle 数据库(其他系统的行为可能不同),您应该知道绑定变量(在 JDBC 语音中:问号)可以替换 标量仅值,例如字符串或数字。
但是您需要像 列表 这样的数字作为输入。 因此在这种情况下绑定变量对您没有帮助。
可能实现您想要的最简单方法是:
在您的查询中,写:
WHERE column_name in (1) -- $REPLACE_THIS$
请注意,我在查询中使用评论作为标记。
然后,在查询的 beforeOpen
事件中,像这样修改查询文本:
// construct a comma-separated string representation of your list
// based on your report parameter (exercise left to the reader)
// var replacement = my_to_sql_csv(params["my_report_parameter"].value);
// for demonstration use:
var replacement = "1,2";
// modify the `IN` expression inside the SQL
this.queryText = this.queryText.replaceAll("(1) -- $REPLACE_THIS$", "(" + replacement + ")";
就是这样。