本节主要介绍如何将查询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}) |
[{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)) |