BIRT使用指令碼接收引數,並設定引數字元編碼
阿新 • • 發佈:2018-12-04
最近剛接觸到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");