服务数据集
服务数据集支持将服务请求返回的 JSON 数组,映射为数据模型。支持的请求包括应用内的服务接口,以及 OpenAPI 接口等。
同时,服务数据集还支持通过 JsonPath 配合正则表达式,从请求的 header 或 body 数据中获取返回的记录数、JSON 数组和错误信息。
区别于其他类型的数据集,服务数据集并不是从数据库的角度来获取数据,而是从 API 请求来获取。对于返回列表数据的 API 接口来说,可以通过服务数据集更方便地在前端展示和使用。
服务数据集和其他动态数据集一样,是通过 DBRest 请求访问的,即调用 DBRest API 访问服务数据集,服务数据集再转调相应的服务 API 实现获取数据、编辑数据。
添加服务数据集
在动态数据集的右侧,点击+按钮,可以创建新的服务数据集:
保存路径
- 数据集的模型描述文件
xxx.data.m 保存在当前模块的根目录下,比如 main 模块的根目录下:
在 .data.m 文件中,会使用 <class type="sql" 来标识 SQL 数据集:
同时在文件中,也能找到之前定义的内容:
使用服务
选择服务
在服务数据集中,点击“选择 API-服务模型”,弹出选择服务窗口
这里列出了应用内所有服务,以及配置好的租户内其它应用的服务
设置查询参数
选择一个服务后,服务的参数会自动作为数据集参数,注意其中的“是否输入”属性,是否输入为是的参数,可以从前端赋值。
特别说明
- 服务中通常使用 page 和 size 这两个参数获取分页数据
- DBrest 使用 limit 和 offset 请求分页数据
- 因此 page 和 size 这两个参数由系统接管,自动实现从 limit 和 offset 到 page 和 size 的转换,所以是否输入为否
添加数据列
如果服务返回数据集的集合,如下图所示,返回分页数据返回“订单主表”集合
在结构中,点击“自动同步”按钮,可将服务返回数据集的结构作为服务数据集的结构
添加服务数据组件
在前端页面上,可以看到后端定义的服务数据集,添加到页面上使用
给参数赋值
如果服务数据集有输入参数,在服务数据组件上,会列出参数,支持给参数赋值
查询数据
调用数据组件的刷新方法 refreshData 查询数据,limit 和 offset 自动转换为 page 和 size,其它参数正常传递
使用 OpenAPI
选择 OpenAPI
在服务数据集中,点击“选择 API-OpenApi”,弹出选择 OpenApi 窗口
输入 ApiDoc 的地址,例如本例使用宠物商店的 ApiDoc,地址为:https://petstore3.swagger.io/api/v3/openapi.json。点击确定按钮,下方显示出宠物商店的 OpenAPI,展开 OpenAPI 显示 API 列表,选择其中一个 API,点击确定按钮
系统根据 ApiDoc 中对于这个 API 的描述,自动填充服务名、请求名称、请求路径、HTTP 方法和请求参数,如下图所示
配置查询数据及结构
API 返回 JSON 数组
如果 API 返回 JSON 数组,数组中的每一项是数据集的一行,如下图所示
切换到“结构”,使用自动同步或 + 添加列,如下图所示
API 返回 JSON 对象
如果 API 返回 JSON 对象,某个键下面是 JSON 数组,如下图所示
配置“查询返回”,在“数据集”中写入 JSON 数组的 JSONPath,如下图所示
切换到“结构”,使用自动同步或 + 添加列,如下图所示
配置分页参数及总记录数
如果 API 分页返回数据,那么需要配置分页参数(例如:page 和 size)和总记录数
分页参数
数据组件使用 limit 和 offset 请求分页数据,API 分页参数通过配置计算表达式,从 limit 和 offset 计算得出,示例如下
<service>
<!-- 数据集参数,通过命名自动映射到数据查询api参数 -->
<param>
<field label="page" name="page" kind="in" editor="" dataType="Integer" private="true" defaultValue="" value="expr:#query['offset']/#query['limit']+1" constraint="" error=""/>
<field label="size" name="size" kind="in" editor="" dataType="Integer" private="true" defaultValue="" value="expr:#query['limit']" constraint="" error=""/>
constraint="" error=""/>
</param>
总记录数
在查询返回的配置中,设置“记录数”,支持 API 在 header 和 body 中返回总记录数
- 在 header 中返回记录数,输入总记录数所在的 header 参数名,如下图所示
- 在 body 中返回记录数,输入总记录数所在的 JSONPath,如下图所示
数据组件刷新后,获取到总记录数,如下图所示
在页面上使用服务数据集
在页面上添加服务数据组件,如果服务数据集只配置了查询 API,则只能用于查询数据
在服务数据集上设置的查询参数,可以在数据组件的“参数”中设置相应的值,如下图所示,这些值会成为调用 API 的参数
返回树形数据
系统支持两种树形数据:二维表数据和 JSON 嵌套数据
二维表树形数据
数据格式
二维表树形数据格式如下图所示,数据中包含主键 fid 和父节点主键 parentId,系统根据这两个值,推导出树形数据
数据加载方式
二维树形数据支持全部加载和懒加载
全部加载
定义一个服务,返回全部数据
使用服务数据集
添加服务数据集
设置为树形数据
在页面上添加服务数据集,服务数据集执行刷新方法 refreshData,就会调用服务,同时将服务返回的数据加载到服务数据集中
运行效果如下图所示
使用服务
添加静态数据集,用于在页面上存储树形数据,提供给树组件使用
静态数据集设置为树形数据
页面上添加服务和静态数据集,在静态数据集的刷新事件中,发送服务请求,将返回的数据加载到数据组件中
静态数据集的刷新事件,代码如下
onTreeAllDataCustomRefresh = (event) => {
event.promise = this.comp("serviceRequest0").send().then(({data})=>{
event.source.loadData(data);
})
}
运行效果如下图所示
懒加载
定义一个服务,传入父 ID 参数,父 ID 为空时,返回根数据,否则返回子节点数据
使用服务数据集
目前暂不支持
使用服务
添加静态数据集,用于在页面上存储树形数据,提供给树组件使用
静态数据集设置为树形数据
页面上添加服务和静态数据集,在静态数据集的刷新事件中,发送服务请求,传入展开的父节点 ID,将返回的子节点数据加载到数据组件中
在树组件的展开收起事件中,获取展开的父节点 ID
静态数据集的刷新事件和树组件的展开收起事件,代码如下
onTreeLevelDataCustomRefresh = (event) => {
event.promise = this.comp("serviceRequest2").send({
parentId:this.expandedKey
}).then(({data})=>{
event.source.loadData(data,{parentRow:this.expandedKey});
})
}
onTree4Expand = ({expandedKeys,extra}) => {
if(extra.expanded){
this.expandedKey = extra.node.fid;
}
}
运行效果如下图所示
JSON 嵌套树形数据
数据格式
JSON 嵌套树形数据格式如下图所示,数据中包括子节点 children,本身已形成树形数据
数据加载方式
JSON 树形数据只支持全部加载
全部加载
定义一个服务,返回 JSON 嵌套数据
使用服务数据集
添加服务数据集
虽然 JSON 嵌套数据,不需要父节点列,但是设置为树形数据需要父节点列,因此添加父节点列
设置为树形数据
在页面上添加服务数据集,子节点列选择 children,如下图所示。服务数据集执行刷新方法 refreshData,就会调用服务,同时将服务返回的数据加载到服务数据集中
运行效果如下图所示
使用服务
添加静态数据集,用于在页面上存储树形数据,提供给树组件使用。虽然 JSON 嵌套数据,不需要父节点列,但是设置为树形数据需要父节点列,因此添加父节点列
静态数据集设置为树形数据
页面上添加服务和静态数据集,在静态数据集的刷新事件中,发送服务请求,将返回的数据加载到数据组件中
静态数据集的刷新事件,代码如下
onJsonDataCustomRefresh = (event) => {
event.promise = this.comp("serviceRequest1").send().then(({data})=>{
event.source.loadData(data,{buildTreeData:true});
})
}
运行效果如下图所示