服务数据集

服务数据集支持将服务请求返回的 JSON 数组,映射为数据模型。支持的请求包括应用内的服务接口,以及 OpenAPI 接口等。

同时,服务数据集还支持通过 JSONPath 配合正则表达式,从请求的 header 或 body 数据中获取返回的记录数、JSON 数组和错误信息。

区别于其他类型的数据集,服务数据集并不是从数据库的角度来获取数据,而是通过 API 请求获取数据。支持两种来源

  • 服务模型:包括当前应用的服务和租户内其他应用的服务
  • OpenAPI:第三方提供的 OpenAPI 接口

服务数据集提供以下5个 API 接口的定义,支持数据的增删改查

  • 列表查询 API
  • 主键查询 API
  • 新增 API
  • 更新 API
  • 删除 API

服务数据集和其他动态数据集一样,是通过 DBRest 请求访问的,即调用 DBRest API 访问服务数据集,服务数据集再转调相应的服务 API 实现获取数据、编辑数据。

添加服务数据集

在动态数据集的右侧,点击 + 按钮,选择“服务”,如下图所示,打开创建数据集对话框

1749174757666

输入显示名称和名称,点击“确定”按钮创建服务数据集,如下图所示

1749174795796

使用服务

选择服务

在服务数据集的列表查询 Api 中,点击“选择 API-服务模型”,弹出选择服务窗口

1749175965274

这里列出了应用内所有服务,以及配置好的租户内其它应用的服务

1721986478141

设置查询参数

选择一个服务后,服务的参数会自动作为数据集参数,注意其中的“是否输入”属性,是否输入为是的参数,可以从前端赋值。

特别说明

  • 服务中通常使用 page 和 size 这两个参数获取分页数据
  • DBRest 使用 limit 和 offset 请求分页数据
  • 因此 page 和 size 这两个参数由系统接管,自动实现从 limit 和 offset 到 page 和 size 的转换,所以是否输入为否

1721986521788

添加数据列

如果服务返回数据集的集合,如下图所示,返回“订单主表”集合

1721986555918

在结构中,点击“自动同步”按钮,可将服务返回数据集的结构作为服务数据集的结构

1721986583760

添加服务数据组件

在前端页面上,可以看到后端定义的服务数据集,添加到页面上使用

1721986624952

给参数赋值

如果服务数据集有可输入的查询参数,在服务数据组件上,会列出参数,支持给参数赋值

1721986678437

查询数据

调用数据组件的刷新方法 refreshData 查询数据,limit 和 offset 自动转换为 page 和 size,其它参数正常传递

1721986738573

使用 OpenAPI

下图是一组查询和编辑 Customer 的 API,服务数据集支持配置这5个 API,实现对 Customer 的增删改查

  • 查询全部 Customer
  • 根据 id 查询一个 Customer
  • 新增一个 Customer
  • 根据 id 修改一个 Customer
  • 根据 id 删除一个 Customer

1749181116940

设置列表查询 API

在服务数据集的列表查询 Api 中,点击“选择 Api-OpenApi”,弹出选择 OpenApi 窗口

1749181175128

输入 ApiDoc 的地址,点击 ApiDoc 右侧的确定按钮,下方显示出 OpenAPI ,展开 OpenAPI 显示 API 列表,选择其中一个执行列表查询的 API,点击确定按钮

1749181269886

系统根据 ApiDoc 中对于这个 API 的描述,自动填充服务名、请求名称、请求路径、HTTP 方法和数据集参数,如下图所示

1749181496054

先点“保存”按钮,然后切换到“结构”页签,最后点“自动同步”按钮,如下图所示,系统从 API 中获取返回的列信息,自动添加到数据集列信息中。列标识不要修改,列名称可以改为中文

1749197884817

数据集必须设置主键,在列的高级选项中,选中“主键”,如下图所示,表示将该列设置为主键列

1749196699775

设置主键查询 API

在服务数据集的主键查询 Api 中,点击“配置”按钮,弹出主键查询 Api 窗口,点击“选择 Api-OpenApi”,弹出选择 OpenApi 窗口

1749181602216

输入 ApiDoc 的地址,点击 ApiDoc 右侧的确定按钮,下方显示出 OpenAPI ,展开 OpenAPI 显示 API 列表,选择其中一个执行主键查询的 API,点击确定按钮,系统根据 ApiDoc 中对于这个 API 的描述,自动填充服务名、请求名称、请求路径、HTTP 方法和服务参数,如下图所示

1749181753326

id 参数即主键,从 DBRest 请求中获取,即设置 id 参数的计算表达式为 #pkList.get(0),如下图所示

1749182035689

设置新增 API

在服务数据集的新增 Api 中,点击“配置”按钮,弹出新增 Api 窗口,点击“选择 Api-OpenApi”,弹出选择 OpenApi 窗口

1749182151529

输入 ApiDoc 的地址,点击 ApiDoc 右侧的确定按钮,下方显示出 OpenAPI ,展开 OpenAPI 显示 API 列表,选择其中一个执行新增的 API,点击确定按钮,系统根据 ApiDoc 中对于这个 API 的描述,自动填充服务名、请求名称、请求路径、HTTP 方法和服务参数,如下图所示

1749182191067

reqbody 参数即新增的数据,从 DBRest 请求中获取,即设置 reqbody 参数的计算表达式为 #data.getNew(),如下图所示

1749182341475

设置更新 API

在服务数据集的更新 Api 中,点击“配置”按钮,弹出更新 Api 窗口,点击“选择 Api-OpenApi”,弹出选择 OpenApi 窗口

1749188576215

输入 ApiDoc 的地址,点击 ApiDoc 右侧的确定按钮,下方显示出 OpenAPI ,展开 OpenAPI 显示 API 列表,选择其中一个执行更新的 API,点击确定按钮,系统根据 ApiDoc 中对于这个 API 的描述,自动填充服务名、请求名称、请求路径、HTTP 方法和服务参数,如下图所示

1749188626116

id 参数即主键,从 DBRest 请求中获取,即设置 id 参数的计算表达式为 #pkList.get(0)。reqbody 参数即更新的数据,从 DBRest 请求中获取,即设置 reqbody 参数的计算表达式为 #data.getUpdate(),如下图所示

1749188691338

设置删除 API

在服务数据集的删除 Api 中,点击“配置”按钮,弹出删除 Api 窗口,点击“选择 Api-OpenApi”,弹出选择 OpenApi 窗口

1749188776457

输入 ApiDoc 的地址,点击 ApiDoc 右侧的确定按钮,下方显示出 OpenAPI ,展开 OpenAPI 显示 API 列表,选择其中一个执行删除的 API,点击确定按钮,系统根据 ApiDoc 中对于这个 API 的描述,自动填充服务名、请求名称、请求路径、HTTP 方法和服务参数,如下图所示

1749188792687

id 参数即主键,从 DBRest 请求中获取,即设置 id 参数的计算表达式为 #pkList.get(0),如下图所示

1749188830400

如果删除 API 支持传 ID 列表,一次删除多条数据,使用 #pkList.join(',') 获取 ID 列表

添加服务数据组件

在页面上添加服务数据组件

  • 如果服务数据集只配置了列表查询 API,则只能用于查询数据,调用数据组件的刷新方法 refreshData 查询数据
  • 如果服务数据集配置了5个 API,可以使用列表详情向导生成页面,实现对服务数据集的增删改查

1749195801448

给参数赋值

服务数据集的列表查询 API 中支持设置查询参数,如下图所示

1749201236848

在数据组件的“参数”中赋值,如下图所示,这些值会成为调用 API 的参数

1745984197343

数据组件上设置的参数作为 DBRest 请求的参数,如下图所示,也会作为调用列表查询 API 的参数

1749201180918

配置数据集结构

API 返回 JSON 数组

如果 API 返回 JSON 数组,数组中的每一项是数据集的一行,如下图所示

1745979287580

切换到“结构”,使用自动同步或 + 添加列,如下图所示

1745925393669

数据集必须设置主键列,在列的高级选项中,选中“主键”,表示将该列设置为主键列,如下图所示

1749198433779

API 返回 JSON 对象

如果 API 返回 JSON 对象,某个键下面是 JSON 数组,如下图所示

1745979509262

配置“列表查询返回”,在“数据集”中写入 JSON 数组的 JSONPath,如下图所示

1749176449021

切换到“结构”,使用自动同步或 + 添加列,如下图所示

1745979615407

数据集必须设置主键列,在列的高级选项中,选中“主键”,表示将该列设置为主键列,如下图所示

1749198286740

配置分页参数及总记录数

如果 API 分页返回数据,那么需要配置分页参数(例如:page 和 size)和总记录数。

分页参数

数据组件使用 limit 和 offset 请求分页数据,API 使用 page 和 size 获取分页数据,page 和 size 可以通过 limit 和 offset 计算得出。

选择 API 后,API 的参数会自动添加到数据集参数中,如下图所示,API 的分页参数如果是 page 和 size,系统会自动设置计算表达式

1749176574292

page 参数的计算表达式:#query['offset']/#query['limit']+1

1749176591270

size 参数的计算表达式:#query['limit']

1749176606454

总记录数

在“列表查询返回”的配置中,设置“记录数”,支持从 header 或 body 中获取总记录数

从 header 中获取

在 header 中返回记录数,输入总记录数所在的 header 参数名,选择表达式类型,输入表达式。例如:从 header 中获取 Content-Length 前两位,设置如下图所示

1749177606418

例如:API 的 Content-Length 返回 124,如下图所示,表达式取前两位,即12

1749178192885

数据组件刷新后,获取到总记录数,总记录数为12 ,如下图所示

1749178210117

从 body 中获取

在 body 中返回记录数,输入总记录数所在的 JSONPath,如下图所示

1749179122025

例如:API 的 body 返回 count 为4,如下图所示

1749178947523

数据组件刷新后,获取到总记录数,总记录数为4,如下图所示

1745979803689

返回树形数据

系统支持两种树形数据:二维表数据和 JSON 嵌套数据

二维表树形数据

数据格式

二维表树形数据格式如下图所示,数据中包含主键 fid 和父节点主键 parentId,系统根据这两个值,推导出树形数据

1722304594868

数据加载方式

二维树形数据支持全部加载和懒加载

全部加载

定义一个服务,返回全部数据

1722319639004

使用服务数据集

添加服务数据集

1749204559778

设置为树形数据

1722322549103

在页面上添加服务数据集,服务数据集执行刷新方法 refreshData,就会调用服务,同时将服务返回的数据加载到服务数据集中

1722322842383

运行效果如下图所示

1722322776148

使用服务

页面上添加服务和服务结果数据集,设置服务结果数据集的树选项,如下图所示

  • 是否树形:是
  • 加载全部数据:是
  • 叶子节点列:选择存有叶子信息的列,是叶子存1
  • 父节点列:选择存有父 ID 的列
  • 父参数:无需设置

1749204702431

运行效果如下图所示

1722322159240

懒加载

定义一个服务,传入父 ID 参数,父 ID 为空时,返回根数据,否则返回子节点数据

1722323296878

使用服务数据集

目前暂不支持

使用服务

页面上添加服务和服务结果数据集,设置服务结果数据集的树选项,如下图所示

  • 是否树形:是
  • 加载全部数据:否
  • 叶子节点列:选择存有叶子信息的列,是叶子存1
  • 父节点列:选择存有父 ID 的列
  • 父参数:设置服务中定义的父 ID 参数

1749205532237

运行效果如下图所示

1722324607899

JSON 嵌套树形数据

数据格式

JSON 嵌套树形数据格式如下图所示,数据中包括子节点 children,本身已形成树形数据

1722305219490

数据加载方式

JSON 树形数据只支持全部加载

全部加载

定义一个服务,返回 JSON 嵌套数据

1722324820330

使用服务数据集

添加服务数据集

1749205659629

虽然 JSON 嵌套数据,不需要父节点列,但是设置为树形数据需要父节点列,因此添加父节点列

1723011230718

设置为树形数据

1723010850049

在页面上添加服务数据集,子节点列选择 children,如下图所示。服务数据集执行刷新方法 refreshData,就会调用服务,同时将服务返回的数据加载到服务数据集中

1723011334804

运行效果如下图所示

1723011029251

使用服务

添加静态数据集,用于在页面上存储树形数据,提供给树组件使用。虽然 JSON 嵌套数据,不需要父节点列,但是设置为树形数据需要父节点列,因此添加父节点列

1722324922911

静态数据集设置为树形数据

1722324966027

页面上添加服务和静态数据集,在静态数据集的刷新事件中,发送服务请求,将返回的数据加载到数据组件中

1722325559294

静态数据集的刷新事件,代码如下

    onJsonDataCustomRefresh = (event) => {
        event.promise = this.comp("serviceRequest1").send().then(({data})=>{
            event.source.loadData(data,{buildTreeData:true});
        })
    }

运行效果如下图所示

1722325795078

数据模型文件

数据集的模型描述文件 xxx.data.m 保存在当前模块的根目录下,例如 main 模块的根目录下:

image-20240123113830801

在 .data.m 文件中,使用 <class type="service" 来标识服务数据集:

image-20240123113811207

同时在文件中,也能找到之前定义的内容:

image-20240123113947013

results matching ""

    No results matching ""