2.5.1 数据集参数
一个查询数据的过程可分为三个阶段:backend执行前、backend执行和backend执行后。
在查询数据时,通常会在条件部分设置一些参数,这些参数可以在backend执行前,从前端传入,或根据表达式计算出来,这时称为前计算。在backend执行后,可以对数据进行加工,例如手机号脱敏,这时称为后计算。
针对前计算和后计算的需求,系统提供两种数据集参数实现相应的功能,分别是查询参数和输出参数。
1. 参数分类
参数分类 | 应用场景 | 支持的数据集 | 定义 |
---|---|---|---|
查询参数 | 前计算,通常放在条件部分 | sql数据集 视图 存储过程 服务数据集 |
输入值:#param['参数名'].inputValue 计算后的值:#param['参数名'].value |
输出参数 | 后计算,通常放在select部分, 参数名和返回结果集(列)有同名的, 以参数优先,实现强制覆盖计算 |
所有动态数据集 | $参数名 |
2. 参数属性
参数的属性说明见下表,其中默认值、计算表达式、约束表达式都是Spring表达式
参数属性 | 说明 | 案例 |
---|---|---|
是否允许前端传入 | 查询参数可以从前端传入,输出参数不需要从前端传入 | 允许前端传入:private="false" |
数据类型 | 参数的数据类型 | 字符串类型:dataType="String" |
默认值 | 前端未传入,且没有设置计算表达式时使用 只能依赖数据集标准参数,不能依赖别的参数 |
固定值:defaultValue="expr:'aa'" 手机号脱敏:defaultValue="expr:#phone.substring(0,3) + '**' + #phone.substring(7)" |
计算表达式 | 优先级高于默认值,可以依赖别的参数,不能依赖别的计算值 | 使用条件:value="expr:#num >= 100 ? 0.8 : 1" |
约束表达式 | 对当前参数的合法性校验,可以依赖别的参数和计算值 | 参数值不能等于bb:constraint="expr:#param['saler'].value != 'bb'" |
验证错误 | 不满足约束时的提示,可以依赖别的参数和计算值 | error="expr:'不能查询bb'" |
3. 查询参数案例
sql数据集的查询语句如下,这里面使用了两个数据集参数,其中saler可由前端传入,year不从前端传入。
在sql语句中,引用参数使用 :参数名称 的写法,如:
SELECT * FROM orderm where saler = :saler and YEAR(orderDate) = :year
- 前端传入
设置入口(在表或者SQL标签下,点击数据集参数下方的+号,选择“默认”):
saler参数,如果前端没有传入,则默认为aa,如果前端传入了,不能是bb,是bb返回错误,设置如下图所示:
请求url如下,其中引用参数使用$参数名
http://host:port/service_name/main/dbrest/orderm?limit=20&offset=0&select=fid,orderNo,phone,saler,orderDate&$saler=eq.aabb
由于设置了默认值,下面两个请求url等价
http://host:port/service_name/main/dbrest/orderm?limit=20&offset=0&select=fid,orderNo,phone,saler,orderDate&$saler=eq.aa
http://host:port/service_name/main/dbrest/orderm?limit=20&offset=0&select=fid,orderNo,phone,saler,orderDate
下面这个请求会报错
http://host:port/service_name/main/dbrest/orderm?limit=20&offset=0&select=fid,orderNo,phone,saler,orderDate&$saler=eq.bb
设置输入参数后,可以在页面的数据集编辑中,在“过滤及参数”对参数进行设置:
- 无需前端传入
year参数,不允许前端传入,默认值为当前年份,设置如下图所示
表达式中使用了系统提供的方法
4. 输出参数案例
- 手机号脱敏,中间显示4个*
在数据集上增加和联系电话列 phone 同名的参数 phone,设置计算表达式为当前数据集的联系电话(#phone)的前三位+四个*+后四位,设置如下图所示
请求url如下,由于参数phone和数据列phone同名,参数phone的值覆盖了数据列phone的值,因此select参数中的phone返回脱敏后的手机号
http://host:port/service_name/main/dbrest/orderm?limit=20&offset=0&select=fid,orderNo,phone,saler,orderDate
上面出现的#phone是对数据列值的引用
- 查询返回新列
在数据集上增加折扣参数 discount,根据当前行的数量列(#num)计算,设置如下图所示
请求url如下,在select中增加数据集参数$discount,返回折扣列
http://host:port/service_name/main/dbrest/orderd?limit=20&offset=0&select=fid,product,num,ordermID,$discount