如需针对不同需求设计一种通用结构的报表,可以通过制作动态列报表实现。
报表commonQuery.rpx设计如下:
B1:=total.max 显示数据集行数。
B2:=to(1,ds1.fcount()) 根据动态列数生成列序号,并进行横向扩展。
B3:=ds1.fname(B2) 根据B2里的列序号得到字段名。
A4:=ds1.select(#0) 根据数据集的行数进行纵向扩展。
B4:=ds1.field(B3) 根据B3里的字段名得到字段值。
B4的显示值表达式为:if(B3=="GENDER",sex.select(d,v==value()),B3=="性别",sex.select(d,v==value()),B3=="学历",education.select(d,v==value()),B3=="DEGREE",education.select(d,v==value()),value())
参数和数据集定义参考上一小节。
如果不想看到列号、行号,分别设置第2行、A列隐藏即可。
至此动态列报表就完成了,在浏览器地址栏输入:http://localhost:6868/demo/raqsoft/guide/jsp/cqIndex.jsp?table=员工&metadata=WEB-INF/reportFiles/commonQuery/commonQueryMetadata.splx&rpx=commonQuery/commonQuery.rpx:
参数说明:
table:需要查询数据的表名。
metadata:spl类型的元数据(文件后缀为.splx/.spl/.dfx),仅支持相对路径,相对于应用根目录
table_name +spl类型的metadata用来生成最终的元数据json串。
rpx:报表模版,用来展示数据。可使用相对路径或绝对路径,使用相对路径时,相对于应用中配置文件raqsoftConfig.xml 里配置的Report中的home属性的路径。
缺省显示所有字段,如果查询部分字段,只需选出被查询字段即可:
选用汇总方式,进行分组查询:
这两种方式没有优劣,如果想通用,就用动态列报表;如果想精细控制,根据查询JSON显示成不同的、有特色的报表(甚至统计图),那就根据查询JSON路由到不同的报表进行展示。
整个通用查询的示例,基本上实现了完全的自动化,使用过程中,从数据库到报表展示,只需业务人员操作通用查询页面完成自己想要的查询。
权限控制都集中在前后的spl脚本文件里实现,每个业务系统都有自己的权限方案,增补这些spl脚本不困难,它也是业务系统期望精细控制的部分。
基于通用查询模块的核心功能,可扩展一些更广泛的用法:
1、元数据JSON不是直接对应数据库表,而是业务系统定义的一些虚拟宽表;
2、业务系统更精细的管理查询JSON,使查询操作能在用户间共享;
3、查询JSON转换成实际结果数据后,不用于展示,直接入库保存;
4、整个系统的页面跳转完全由业务系统自定义,把通用查询模块嵌入进去。