本节主要介绍如何将查询JSON转换为报表结果数据。
这里我们以集算器脚本处理查询JSON为例。将查询JSON传入spl中,从数据库中查询出需要的数据。
脚本举例:

上图展示的脚本不完整,仅做示意,具体参考commonQueryDS.splx。该文件位于[安装根目录]\report\web\webapps\demo\WEB-INF\reportFiles\commonQuery\下。
脚本主要处理过程如下:
1、解析查询JSON;
2、根据查询JSON的查询细节以及一些权限参数(如用户ID)拼出最后的查询语句(可以理解为SQL);
3、数据库执行SQL,返回符合要求的数据;
4、增加二维表存储真实值和显示值,并返回。
l 接收查询模板返回的查询JSON做解析
| >q=json(queryJSON) | >params=json(params) | 
l 权限控制
commonQueryDS.splx中权限控制的部分脚本:
| if (params2.userId==23) | >wheres.insert(0,"EMPID==23") | 
| else if (params2.userId==24) | >wheres.insert(0,"EMPID==24") | 
查询员工表时,可根据用户ID的不同,返回不同查询信息。
如下:
用户ID为23时,只能查询EMPID为23的信息:

用户ID为24时,只能查询EMPID为24的信息:

l 数据库执行SQL,返回符合要求的数据
| =connect("demo") | 
| >sql="select * from "+params.table | 
| =A21.query(sql) | 
l 根据查询JSON中的别名信息重命名字段别名,以此改变结果集中的字段名
| aliasNamesExp = "员工编号:ID" | 
| =A25.new(${aliasNamesExp}) | 

l 通过性别字段,计算出一个显示值字段
| [{v:1,d:"男"},{v:2,d:"女"}] | 
 | 
| if (A25.fname().pos("性别")!=null) | =A25.derive(B32.select@1(v==性别).d:性别名称) | 

l 设置代码值和显示值。用于为结果集数据设置显示值。
| >sex=create(v,d),"1:男;2:女".split(";").(~.split(":")).run(sex.insert(0),tmp=sex(sex.len()),tmp.v=int(~(1)),tmp.d=~(2)) | 
