输出数据集
输出数据集有两种用途,一种是获取嵌套数据,如下图所示,orderd 是其中的嵌套数据
另一种是实现关联查询,如下图所示,orderd_xxx 是关联查询得到的数据
- 这种关联查询不是数据库的 join,是使用 Java 实现的,因此可以实现任意情况的关联查询,包括跨不同数据库类型的关联查询
- 如果关联查询得到多条数据,只会返回其中一条数据
输出数据集中的数据是使用 Java 代码查询,然后按照字段映射,和主数据集的数据合并,因此输出数据集的数据不仅可以来自于数据库,也可以来自于服务。
用途
获取嵌套数据
DBRest 支持主从数据的单独分别获取,也支持形成 JSON 嵌套数据一起返回。例如:有如下图所示的两条主表数据,以及对应的三条从表数据。
嵌套返回查询结果如下:
[
{
"recordCount": 2
},
{
"fid": "6",
"orderNo": "20220034",
"totalMoney": "30000.00",
"detail": [
{
"fid": "C9D1B67D2EA0000154181BC01A591711",
"product": "办公桌",
"num": 6,
"orderID": "6"
},
{
"fid": "C9D1B68259500001C8D59A156AD6F150",
"product": "办公椅",
"num": 6,
"orderID": "6"
}
],
"orderDate": "2022-05-16"
},
{
"fid": "7",
"orderNo": "20220044",
"totalMoney": "45000.00",
"detail": [
{
"fid": "C9D1B687AF700001C4DF11AF10E51C6C",
"product": "笔记本",
"num": 3,
"orderID": "7"
}
],
"orderDate": "2022-05-11"
}
]
添加输出数据集
在主数据集的数据集参数中,添加“:输出数据集”,设置界面如下图所示
在来源中选择数据集
- 名称:代码使用,支持英文和数字
- 显示名:设计界面使用,支持中文
- 数据集:选择从数据集
- 过滤:对数据集设置过滤条件
- 排序:对数据集设置排序
- 嵌套数据:是否作为嵌套数据使用。选中表示嵌套数据修改后会更新数据表;不选中表示只用于查询
- 字段映射:设置从数据集和主数据集的关联列关系
选择输出数据集
主数据集设置输出数据集后,主数据集的数据列中就包括了输出数据集和输出数据集的各个列,如下图所示,此时需要注意
- 要获取嵌套数据,选择输出数据集 $orderd(),如果不需要获取 orderd 中的所有列,可以通过选择列设置,但是外键列必须选择
- 要获取关联查询数据,选择输出数据列 $orderd.fid、$orderd.categoryId 等
- 数据列中都不选中,表示查询数据集的全部列,但是不包括输出数据集
- 数据列中如果有选中,表示只查询选中列,因此除了选择输出数据集或输出数据列,还必须选择主数据集的列,例如主键、版本(如果有)都是必选的列
经过上面的配置,调用主数据集数据组件的刷新方法 refreshData 时,返回嵌套数据,如下图所示
还可以使用表格组件展示嵌套数据,参考《子数据集》
使用接口查询数据
除了通过数据组件的刷新方法,还可以调用 DBRest 查询数据接口,获取输出数据集中的全部列,url 如下:
域名/微服务名/main/dbrest/saleOrder?limit=20&offset=0&select=fid,orderNo,totalMoney,$detail(),orderDate
获取输出数据集中的部分列,url 如下:
域名/微服务名/main/dbrest/saleOrder?limit=20&offset=0&select=fid,orderNo,totalMoney,$detail(product,num,orderID),orderDate
关联查询
添加输出数据集
关联查询和嵌套数据的后端设置完全相同,区别只在于前端数据组件数据列的设置
选择输出数据列
关联查询和嵌套数据的后端设置完全相同,区别只在于前端数据组件数据列的设置
- 要获取关联查询数据,选择输出数据列 $orderd.productId、$orderd.num等,如下图所示
- 要获取嵌套数据,选择输出数据集 $orderd(),如果不需要获取 orderd 中的所有列,可以通过选择列设置,但是外键列必须选择
- 数据列中都不选中,表示查询数据集的全部列,但是不包括输出数据集
- 数据列中如果有选中,表示只查询选中列,因此除了选择输出数据集或输出数据列,还必须选择主数据集的列,例如主键、版本(如果有)都是必选的列
经过上面的配置,调用主数据集数据组件的刷新方法 refreshData 时,返回关联查询数据,如下图所示
数据来源
输出数据集的数据来源分为三种
- 关联引用:使用关联引用中设置的数据集、过滤条件查询数据,通过映射关系整合数据
- 数据集:使用设置的数据集和过滤条件查询数据,通过映射关系整合数据
- 服务:调用一个服务获取数据,通过映射关系整合数据
关联引用
在关联引用中设置的内容。不仅可以用于在页面上展示,还可以用作关联查询,无需再次设置。
下面介绍使用关联引用实现关联查询的方法
后端设置
在学生数据集的民族列上设置关联引用,如下图所示:
在数据集参数中,将在民族列上定义的关联引用,作为输出数据集,如下图所示:
前端设置
对学生数据集的查询,可以得到学生数据集自身的列和输出数据集中的列,在数据组件的数据列中勾选需要返回的列,如下图所示:
查询结果如下图所示:
使用数据集
关联查询的数据可以来自数据集,参考前面《用途》里面的两个案例
服务
关联查询的数据也可以来自服务,根据服务的位置,服务地址有不同的写法,见下表
调用服务 | 服务地址 | 说明 |
---|---|---|
调用当前应用的服务 | service:/main/api | |
调用其他应用的服务 | service://{serviceName}/main/api | serviceName 是服务名,例如:调用应用 oa 的服务, 服务地址为:service://oa/main/api |
跨租户调用服务 | service://{serviceGateway}/oa/main/api | serviceGateway 是服务网关,通过服务网关调用的服务必须是做过服务注册的, 例如:调用 tenanta 租户的 oa 应用的服务,服务地址为:service://oa@tenanta/main/api |
调用外部 API | http(s)://www.baidu.com/main/api |
调用当前应用的服务,配置如下图所示
数据集来源
关联引用和数据集里面都可以选择数据集,这个数据集可以来自其它模块或其它应用,具体做法参考《跨模块跨应用访问数据集》