反饋已提交

網絡繁忙

JS實現動態資料庫表獲取

1. 概述

1.1 版本

報表伺服器版本
功能變更
11.0--

1.2 預期效果

當明細資料存在資料庫多張表中時,要根據篩選條件查詢這些表中資料,不同的條件對應查詢不同的表資料。

如資料庫中存放 2020-04-15 的資料表 test_0415,存放 20200416 的資料表 test_0416 ,如果介面選擇查詢 2020-04-15到 2020-04-16 的資料,則需要查詢 test_0415 和 test_0416 兩張表。如下圖所示:

1.3 實現思路

藉助 JS 來進行判斷選擇的日期區間,然後透過 for 來實現多 select 的 union 操作,傳回完整的 SQL 語句實現動態 SQL 獲取動態資料庫表。

2. 範例

2.1 準備資料

1)將使用 FRDemoTW 中的內建資料表 test_0415,test_0416,test_0417,test_0418,如下圖所示:

2)建立資料集 ds1 ,在 SQL 編輯框中 ${sql} ,即 SQL語句整體作為一個參數,將根據不同的語句從這上述四張資料表中獲取不同的資料。如下圖所示:

sql 參數設定一個預設值:SELECT * FROM test_0415

2.2 新增元件

1)在「參數面板」中新增兩個「日期元件」,元件名分別為 startdate 和 enddate,並新增對應的「文字元件」。

2)在「參數面板」中新增一個「文字元件」元件名為 sql,用來展示查詢資料的 SQL 語句。

3)新增「查詢按鈕」。

如下圖所示:

2.3 設計報表

將 ds1 中的欄位拖入報表範本中。如下圖所示:

2.4 新增事件

給「查詢按鈕」新增一個「點選」事件。如下圖所示:

JavaScript 程式碼如下:

//傳回開始日期的毫秒數
var startdate = Date.parse(_g().getParameterContainer().getWidgetByName("startdate").getValue());
//傳回截止日期的毫秒數
var enddate = Date.parse(_g().getParameterContainer().getWidgetByName("enddate").getValue());
//傳回兩個日期之間的天數
var days=(enddate - startdate)/(1*24*60*60*1000);
//定義字串
var str = new String();
//傳回程式sql程式碼
for(var i=0;i<=days;i++)
{
var temp_num = 15;
temp_num = temp_num + i;
var temp = "select * from ";
temp = temp + 'test_04' + temp_num.toString() + ' ';
str = str + temp;
if(i<days)
{
str = str + 'union ' ;
}
}
_g().getParameterContainer().getWidgetByName("sql").setValue(str);

2.5 效果預覽

2.5.1 PC 端

儲存報表,點選「分頁預覽」,效果如 1.2 節所示。

注:預覽範本前,需要在平台 「管理系統>安全管理>SQL防注入」處取消勾選「禁用特殊關鍵字,詳細內容可參考:SQL防注入

2.5.2 行動端

App 及 HTML5 效果如下圖所示:

3. 範本下載

附件列表


主題: 參數應用
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙