最近刚接触到birt报表开发,整理了下使用脚本拼接参数的问题。如果需要使用脚本拼接参数,在报表设计中选中自己所建的数据集,然后点击脚本,选择beforeOpen添加脚本。
var sqlWhere = " where 1=1 "; //拼装where
var sqlGroup = " group by ";//拼装 group
var sqlOrder = " order by ";// 拼装 order
//接收页面传过来的参数
var type_code = decodeURI(params["type_code"].value); //存款类型
var bank = decodeURI(params["bank"].value); //开始日期
var detial_type= decodeURI(params["detial_type"].value); //类型细分
//参数的拼接
//存款产品
if(type_code == "yes"){//全选
sqlGroup = sqlGroup + "SAVING_DEPOSIT,SAVING_NAME, ";
sqlOrder = sqlOrder + "SAVING_DEPOSIT,";
}else if(type_code == "no"){//不显示数据列
sqlGroup = sqlGroup + "SAVING_DEPOSIT,SAVING_NAME, ";
}else {//选择那个显示那个
sqlWhere = sqlWhere + "AND SAVING_DEPOSIT in " + type_code;
sqlGroup = sqlGroup + "SAVING_DEPOSIT,SAVING_NAME, ";
sqlOrder = sqlOrder + "SAVING_DEPOSIT, ";
}
//银行
if(bank == "yes"){//全选
sqlGroup = sqlGroup + "BANK_CODE,BANK_NAME, ";
sqlOrder = sqlOrder + "BANK_CODE,";
}else if(bank == "no"){//不显示数据列
sqlGroup = sqlGroup + "BANK_CODE,BANK_NAME, ";
}else {//选择那个显示那个
sqlWhere = sqlWhere + "AND BANK_CODE in " + bank;
sqlGroup = sqlGroup + "BANK_CODE,BANK_NAME, ";
sqlOrder = sqlOrder + "BANK_CODE, ";
}
//类型细分
if(detial_type == "yes"){//全选
sqlGroup = sqlGroup + "TYPE_CODE,TYPE_NAME, ";
sqlOrder = sqlOrder + "TYPE_CODE,";
}else if(detial_type == "no"){//不显示数据列
sqlGroup = sqlGroup + "TYPE_CODE,TYPE_NAME, ";
}else {//选择那个显示那个
sqlWhere = sqlWhere + "AND TYPE_CODE in " + detial_type;
sqlGroup = sqlGroup + "TYPE_CODE,TYPE_NAME, ";
sqlOrder = sqlOrder + "TYPE_CODE, ";
}
//如果什么都没有选择可以要把其他的列拼装上
sqlGroup = sqlGroup + "ACCOUNT";
sqlOrder = sqlOrder + "ACCOUNT";
//执行SQL
this.queryText = this.queryText + sqlWhere + sqlGroup + sqlOrder;
//打印 可以将SQL语句打印在控制台,便于检查和调试
java.lang.System.out.println(TYPE+"-----"+CLTNO +"------"+this.queryText+"-----");
如果参数接受过来是汉字,并且在上述脚本中打印也是汉字,但是在页面显示是乱码。可以在birt报表--布局--点击空白处---点击脚本---脚本处选择 initialize 添加以下脚本设置编码
//参数乱码 标题参数
params["title"] = java.net.URLDecoder.decode(params["title"],"UTF-8");