程序员的自我救赎---2.1:报表系统项目分析
《报表系统项目分析》
“报表系统”顾名思义是用来做报表用的,但是在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。或者扫描左侧二维码加群。