【问题标题】:How to fetch data for multiple values of a parameter one by one如何一一获取参数的多个值的数据
【发布时间】:2014-04-11 06:51:43
【问题描述】:

我有一个参数的多个值,我想为每个查询获取 Birt 报告中每个参数值的数据。我只为一个参数值而不是全部获取数据。 m 使用脚本数据源。打开和获取方法。谢谢

在数据集中打开

 importPackage(Packages.com.abc.test.events);

var TlantNo = params["tlant"].value;
var reqNo = params["Number"].value;

poreEvents = new StdPoreReqEvents();
poreEvents.setReqNo(reqNo);
poreEvents.setTlantNo(TlantNo);
poreEvents.open();

获取

var poreRO = poreEvents.fetch();
if (poreRO == null) {
    return false;
} else
    {

        row["REQ_NO"] = poreRO.getReqNo();
        row["REQ_DATE"] = poreRO.getReqDate();

        return true;
    }

【问题讨论】:

  • 在上面的脚本数据集中哪个参数应该有多个值? “Tlant”还是“Number”?
  • 号码。我想用一个参数触发查询然后想要它获取的数据。然后其他参数值应该在第一个值获取它的数据后处理
  • 如果我理解正确,请告诉我。当“tlant”为单值时,“Number”参数为多值。对于“Number”的每个值,您必须运行 poreEvents.fetch。最后,数据集应该返回与“Number”参数值一样多的行。我说的对吗?

标签: birt


【解决方案1】:

具有多个值的报表参数是一个数组,我们必须通过脚本数据集对其进行迭代。

在数据集的open事件中,我们只需要初始化一个全局索引:

i=0;

fetch 事件中,使用以下脚本处理每次迭代。特别注意我们如何获得reqNo的值:

importPackage(Packages.com.abc.test.events);

if (params["Number"].value!=null && i<params["Number"].value.length){
    var TlantNo = params["tlant"].value;
    var reqNo = params["Number"].value[i];   

    //ETC. do here your stuff with porevents, declare poreRO, check if result is null

    row["REQ_NO"] = poreRO.getReqNo();
    row["REQ_DATE"] = poreRO.getReqDate();
    i++;  //Important: increment this even if poreRO is null, otherwise infinite loop
    return true; //should return true even if poreRO was null, to process next rows
}else{
  return false;
}

【讨论】:

  • Thanx.. :) 但它已通过数据集的输入/输出参数解决。
【解决方案2】:

解决此问题的另一种方法是定义一个数据集,该数据集具有作为多值参数的输出列通过多值参数的 IN 查询获取该列,然后将该值表示(输出列值)传递给其他数据集作为输入/输出参数并绑定到参数。 它解决了我的问题:)

【讨论】:

  • 谁能详细说明这个解决方案?我认为这会增加我(任何人)对数据集如何工作的理解。
猜你喜欢
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多