UReport2 參數(shù)

2023-01-05 16:04 更新
UReport2教學視頻http://pan.baidu.com/s/1boWTxF5,密碼:98hj

       參數(shù)指的是從報表外部傳入報表的值,在 UReport 2中,三種類型的數(shù)據(jù)源都支持參數(shù)。直接連接數(shù)據(jù)庫和內(nèi)置數(shù)據(jù)庫連接兩種方式本質(zhì)上一樣,都是采用 SQL 方式從數(shù)據(jù)庫中獲取報表數(shù)據(jù),所以對于這種類型的數(shù)據(jù)源參數(shù)傳遞只需要在 SQL 層面配置好相關(guān)參數(shù)即可;對于 spring bean 類型的數(shù)據(jù)源,就更為簡單,只需要在對應(yīng)在方法中獲取對應(yīng)的參數(shù)即可。我們首先來看看 SQL 取數(shù)據(jù)方式如何配置參數(shù)。

SQL數(shù)據(jù)集參數(shù)

       對于 SQL 方式數(shù)據(jù)集參數(shù)傳遞方式,實際上就是給 SQL 添加查詢條件,UReport2 中S QL 參數(shù)傳遞采用的是命名參數(shù)的方式,這點與 Spring中NamedParameterJdbcTemplate 中采用命名參數(shù)的寫法完全一致,所以如果您用過 Spring 中的 NamedParameterJdbcTemplate,那對命名參數(shù)一定很熟悉。

示例
說明
select * from emp where dept_id=:deptId 查詢條件為 dept_id=:deptId,運行時引擎將采用名為 deptId 的參數(shù)值來填充 SQL
select * from emp where age > :age and dept_id in (:deptIds) 這個 SQL 中條件有兩個,同樣運行時引擎將嘗試從外部參數(shù)中獲取對應(yīng)的值來填充 SQL

       打開報表設(shè)計器,添加一個數(shù)據(jù)庫連接方式數(shù)據(jù)源(直接連接數(shù)據(jù)庫或內(nèi)置數(shù)據(jù)庫連接兩種方式任選其一),添國一個 SQL 數(shù)據(jù)集,即可在彈出的窗口中定義 SQL 及相關(guān)參數(shù)。

sql-dataset

       在我們定義好含有命名參數(shù)的 SQL 后,接下來我們需要,在下面的參數(shù)配置區(qū)域進行配置 SQL 中用到的命名參數(shù),當然如果你的 SQL 中沒用到命名參數(shù),那就不需要配置了。

參數(shù)各字段
說明
參數(shù)名 對應(yīng)的命名參數(shù)名稱,比如上面的 deptId 等
數(shù)據(jù)類型 當前參數(shù)在數(shù)據(jù)庫中定義的數(shù)據(jù)類型。UReport2 中對應(yīng)的數(shù)據(jù)類型有六種,分別是:String、Integer、Float、Boolean、Date 和 List。
默認值

當前外部沒有為這個命名參數(shù)提供值的時候?qū)⒉捎眠@里提供的默認值來填充 SQL。

還需要注意的是,如果 SQL 中有命名參數(shù),那么一定義配置好參數(shù)的默認值,否則將無法為對應(yīng)的SQL數(shù)據(jù)集生成對應(yīng)的表字段。

關(guān)于參數(shù)的數(shù)據(jù)類型要求配置參數(shù)時定義好參數(shù)的數(shù)據(jù)類型, 是為了與數(shù)據(jù)庫中定義的字段的數(shù)據(jù)類型匹配,在運行時外部傳入的參數(shù)或在外部未傳入?yún)?shù)而采用的默認值時,引擎會根據(jù)參數(shù)配置的數(shù)據(jù)類型將采用的數(shù)據(jù)值進行自動轉(zhuǎn)換,以期與目標數(shù)據(jù)類型吻合。比如,參數(shù)為日期類型,外部可傳入對應(yīng)的日期類型的對象或普通字符串,如果是字符串,要求是 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss 格式,否則引擎將無法解析成日期對象,同樣參數(shù)類型為 Date 的參數(shù)默認值也必須是 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss 格式的字符串。如果參數(shù)是 List 類型,那么外部可以傳入一個 List 對象,或一個以逗號分隔的字符串,如果是一個以逗號分隔的字符串,那么引擎將以逗號為分隔符,將字符串轉(zhuǎn)換成一個 ArrayList 對象,List類型的參數(shù)多用在存在 in 條件的 SQL 中。

       設(shè)計好帶有參數(shù)的報表后,我們可以直接預(yù)覽,默認預(yù)覽顯示的數(shù)據(jù)將是參數(shù)配置時參數(shù)默認值對應(yīng)的數(shù)據(jù),這時我們可以在預(yù)覽報表的 URL 后面手工添加對應(yīng)的參數(shù)名,以使報表呈現(xiàn)我們需要的數(shù)據(jù)。在URL后面添加參數(shù)是最簡單、最直接的一種為帶參數(shù)的報表提供外部參數(shù)的方法,報表一旦檢測到外部有對應(yīng)的參數(shù)傳入,則不再取這個參數(shù)對應(yīng)的默認值來填充 SQL。

       從2.0.9版本開始,SQL 數(shù)據(jù)集中的 SQL 開始支持表達式(表達式語法見5.表達式),參數(shù)格式為:${表達式},也就是說,在 ${} 中輸入的內(nèi)容引擎認為是表達式,否則認為是標準 SQL。一旦在 ${} 中輸入表達式,引擎會嘗試進行語法檢查。在 SQL 表達式中,我們可以對傳入?yún)?shù)進行判斷,這樣就可以實現(xiàn)諸如當有參數(shù)傳入 SQL 時,就取該參數(shù)過濾后的結(jié)果集,如果沒有該參數(shù)傳入時則取所有數(shù)據(jù)集需求,示例如下圖所示:

sql-expr

表達式中返回SQL的注意事項我們在使用表達式返回SQL時,如果SQL中包含單引號包裹的字符串,那么需要加上“\”來為單引號轉(zhuǎn)義,否則會出現(xiàn)語法錯誤,如下面的表達式:${ if(param("deptId")==null || param("deptId")==''){     return "select * from employee where dept_id=\'D11\'"; } }在上面的表達式中,return 后面的 SQL 中 dept_id=\'D11\' 就用來“\”為單引號轉(zhuǎn)義。

Spring Bean 數(shù)據(jù)源參數(shù)

       早在3.報表存儲與數(shù)據(jù)源配置一節(jié)中我們就介紹過,要將一個 Spring Bean 的方法定義某個數(shù)據(jù)集的數(shù)據(jù)來源,那么方法必須要有三個參數(shù),依次是 String,String,Map,最后一個 Map 參數(shù)就是外部傳入報表的參數(shù)集合,UReport2 會將外部傳入的各種參數(shù)都收集到這個 Map 中,我們只需要根據(jù)需求從 Map 中獲取即可。

public List<Map<String,Object>> loadReportData(String dsName,String datasetName,Map<String,Object> parameters){
    int salary=0;
    Object s=parameters.get("salary");
    if(s!=null){
        salary=Integer.valueOf(salary);
    }
    List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
    for(int i=0;i<1000;i++){
        int ss=RandomUtils.nextInt(10000)+i;
        if(ss<=salary){
            continue;
        }
        Map<String,Object> m=new HashMap<String,Object>();
        m.put("id", i);
        m.put("name", RandomStringUtils.random(10, true, false));
        m.put("salary", ss);
        list.add(m);
    }
    return list;
}

       在上面的代碼中,我們嘗試從 Map 中獲取名為 salary 的參數(shù),如果存在則采用這個參數(shù)。

查詢表單設(shè)計

       從 UReport2.2版本開始,UReport 設(shè)計器提供了一個查詢表單設(shè)計器,通過這個設(shè)計器,可實現(xiàn)在網(wǎng)頁中對SQL里配置的參數(shù)參數(shù)配置相應(yīng)的查詢表單。具體做法就是我們首先需要配置一個SQL數(shù)據(jù)集,并為其配置相應(yīng)的查詢參數(shù),如下圖所示:

sql-params

       接下來點擊報表模版設(shè)計器工具欄上如下圖所示按鈕:

designer-form-tool

       點擊后就會彈出如下圖所示的表單設(shè)計器窗口,在這個窗口就進行相應(yīng)的查詢表單設(shè)計即可:

form-d1

      設(shè)計器設(shè)計方式比較簡單,那就是采用直接拖曳方式,將布局或輸入組件拖到畫布上即可。對于輸入類型的組件來說,在將其拖曳到畫布后,可通過點擊將其選中,然后切換到"屬性"頁即可對這個輸入組件的屬性進行調(diào)整,需要注意的是,所有的輸入組件都需要配置其綁定的查詢參數(shù),否則將 HTML 預(yù)覽頁將不能提交查詢,如下圖所示:

form-binding

       這里要選擇的綁定查詢參數(shù),就是我們在SQL數(shù)據(jù)集里配置的參數(shù)查詢,如果不配置,那么這里將無法選擇。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號