《報表系統項目分析》
“報表系統”顧名思義是用來做報表用的,但是在Winner當中報表系統經常被我們用來當作網頁版的PL/SQL來使用。
不用Oralce的可能不知道PL/SQL,其實就是SQL客戶端。
往往我們有的項目來不及寫后台,或者各個部門需求的后台列表不一致有“查詢”需求的時候 "PLSQL報表系統"就能幫助我們
解決這類問題。常規意義上報表系統需要具備以下三點功能:
1,提供數據查詢生成報表(高級的需要生成圖表)
2,提供報表下載(高級的可以直接轉發郵件)
3,方便技術免除繁雜的后台開發(特別是僅有查詢的后台列表)
這三點中我最喜歡的也就是第三點,我們來看看Winner框架中PLSQL報表系統的截圖:
之前在《事務的使用》中,我有提到一句說我把鎖表偵探放到PLSQL項目中,這樣通過Spotlight監控到數據庫異常
就立馬上PLSQL查詢看是否有鎖表,所以這里PLSQL還起到了一個保存常用sql的功能。 (當然如果是高級管理員可以直接寫成
存儲過程,這里前面有講我們基本很少用存儲過程.)
我們看看PLSQL是如何使用的:
拿查詢系統內所有VIP用戶舉例,這是銷售部門、客服部門經常要用的一個報表,如果給他們單獨開發一個后台費時又費力,有了PLSQL
就不一樣了,只需要在PLSQL中添加一條SQL即可
首先我們寫一條查詢VIP用戶的sql
select t.user_id, t.user_code, t.user_name, decode(t.user_level,'0','普通用戶','1','VIP用戶'), t.auth_time from tnet_user t where t.user_level = 1
Oracle中有decode函數非常方便,Sqlserver中就需要用Case When 來實現。
然后將這條sql添加到報表系統
可以先驗證一下SQL的正確性,這里系統會有很多關鍵字過濾,比如Update,Delete等等都是添加不了的。這樣添加完之后會有兩個問題:
1,如果要給這張表單做關鍵字搜索,比如用戶姓名搜索,或者是注冊時間搜索就做不了?
2,這樣添加之后,查詢出來表頭是數據庫字段,給市場人員使用,他們是否能看懂?
我們先看看表單呈現出來的效果:
根據以上兩個個問題,我們一個個來講解,其實第一個問題非常簡單,取別名就可以了(decode不識別也是因為沒有加別名)。
select t.user_id "用戶編號", t.user_code "用戶賬戶", t.user_name "用戶姓名", decode(t.user_level,'0','普通用戶','1','VIP用戶') "級別", t.auth_time "注冊時間" from tnet_user t where t.user_level = 1
再來第二個問題,沒有條件搜索怎么解決? Winner的PLSQL優點也是這一塊,支持各種條件搜索,關鍵字、時間 都沒問題,只需要把SQL再改一下
select t.user_id "用戶編號", t.user_code "用戶賬戶", t.user_name "用戶姓名", decode(t.user_level,'0','普通用戶','1','VIP用戶') "級別", t.auth_time "注冊時間" from tnet_user t where t.user_level = 1 and #t.user_name=:user_name#
這里以用戶名查詢為例,添加用戶名查詢,#t.user_name=:user_name# 這種寫法是報表系統自身解析了這種語法,自動識別
有成對“#”的話就判斷為條件搜索,並且會自動在界面上生成查詢框。
再看看效果:
最后就是,這張報表給誰有權限使用,誰沒有權限使用。說白了就是授權:
授權界面:
大概功能就介紹到這里了,PLSQL報表系統最大的不足就是在圖表這一塊。 如果公司對圖形化報表有要求的話,目前Winner
的PLSQL報表系統還不支持,這一塊最需要升級的。 另外就是我說的,下載 和 郵件發送,目前下載也只支持Excel后續有時間還要擴展
PDF,現在要PDF也只能通過excel去轉,也不有點缺陷,郵件也是要下載之后再轉發。
PLSQL報表系統,我們公開源碼,GitHub下載地址:https://github.com/demon28/PLSQL
有興趣一起探討Winner框架的可以加我們QQ群:261083244。或者掃描左側二維碼加群。