数据集参数

一个查询数据的过程可分为三个阶段:backend 执行前、backend 执行和 backend 执行后。

在查询数据时,通常会在条件部分设置一些参数,这些参数可以在 backend 执行前,从前端传入,或根据表达式计算出来,这时称为前计算。在 backend 执行后,可以对数据进行加工,例如手机号脱敏,这时称为后计算。

针对前计算和后计算的需求,系统提供两种数据集参数实现相应的功能,分别是查询参数和输出参数。

参数分类

参数分类 应用场景 支持的数据集 定义
查询参数 前计算,通常放在条件部分 sql数据集 存储过程 服务数据集 输入值:#param['参数名'].inputValue 计算后的值:#param['参数名'].value
输出参数 后计算,通常放在select部分,参数名和返回结果集(列)有同名的,以参数优先,实现强制覆盖计算 所有动态数据集 $参数名

参数属性

参数的属性说明见下表,其中默认值、计算表达式、约束表达式都是 Spring 表达式。表达式以 expr: 开头,点击 ┇ 打开表达式编辑器,在编辑器中输入,不要直接在参数定义界面输入,以免表达式不生效

参数属性 说明 案例
是否允许前端传入 查询参数可以从前端传入,输出参数不需要从前端传入 允许前端传入:private="false"
数据类型 参数的数据类型 字符串类型:dataType="String"
默认值 前端未传入,且没有设置计算表达式时使用 只能依赖数据集标准参数,不能依赖别的参数 固定值:defaultValue="expr:'aa'"
计算表达式 优先级高于默认值,可以依赖别的参数,不能依赖别的计算值 手机号脱敏:value="expr:#phone != null ? #phone.substring(0,3) + '**' + #phone.substring(7,11) : null" 使用条件:value="expr:#num >= 100 ? 0.8 : 1"
约束表达式 对当前参数的合法性校验,可以依赖别的参数和计算值 参数值不能等于bb:constraint="expr:#param['saler'].value != 'bb'"
验证错误 不满足约束时的提示,可以依赖别的参数和计算值 error="expr:'不能查询bb'"

查询参数案例

sql 数据集的查询语句如下,这里面使用了两个数据集参数,其中 saler 可由前端传入,year 不从前端传入。

在 sql 语句中,引用参数使用 :参数名称 的写法,如:

    SELECT * FROM orderm where saler = :saler and YEAR(orderDate) = :year

前端传入

设置入口(在表或者 SQL 标签下,点击数据集参数下方的+号,选择“默认”):

1659428833517

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

设置输入参数后,可以在页面的数据集编辑中,在“过滤及参数”对参数进行设置:

1659431835872

1659431847832

无需前端传入

year 参数,不允许前端传入,默认值为当前年份,设置如下图所示

表达式中使用了系统提供的方法

输出参数案例

手机号脱敏,中间显示4个*

在数据集上增加和联系电话列 phone 同名的参数 phone,设置计算表达式为当前数据集的联系电话(#phone)的前三位+四个*+后四位,设置如下图所示

1743155396791

请求 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 是对数据列值的引用

在其它数据允许编辑时,为避免该值被存回数据表,增加数据集规则,设置该列忽略更新,如下面两幅图所示

1743155667684

1743155694094

查询返回新列

在数据集上增加折扣参数 discount,根据当前行的数量列(#num)计算,设置如下图所示

请求 url 如下,在 select 中增加数据集参数 $discount,返回折扣列

    http://host:port/service_name/main/dbrest/orderd?limit=20&offset=0&select=fid,product,num,ordermID,$discount

results matching ""

    No results matching ""