# 三方接口查询量过多同步方案场景

来源快照：`result_data_new_260518.json`

- 来源 ID：`1234777787416715424`
- 模块：低代码平台e-builder
- 目录：动作流 - 场景搭建 - 数据同步相关场景
- space ID：`1157961794811633670`
- 原文链接：未提供
- 产品基线：未提供

## 正文

# 泛微e-cology10 ESB中心应用场景专题介绍 

当三方接口返回数据量较大时如何通过分页方式将数据分批插入到EB表单

# 一、编写目的

通过将三方接口查询返回的数据插入到EB，当返回的数据量过大时动作流执行会提示内存限制或者超时等提示，需要对查询的数据进行分页通过MQ的方式去实现分批插入。

实现该场景需要使用两个动作流去配置，主要是通过内置MQ发送组件发送页数数据，然后通过内置MQ监听组件接收页数数据：

1、动作流A：通过三方接口先获取到数据的总数，然后通过每页需要传的条数计算出页数；通过循环将每页的页数传给内置MQ发送组件中

2、动作流B：内置监听MQ组件获取从内置MQ发送组件传来的页数，通过三方接口的页数和条数参数去查询当前页数下的数据

注：这种场景一个很大的前提是三方接口必须支持分页查询，也就是接口请求参数需要有页数和条数，以及响应返回的参数需要有总数即一般常见的total参数

**三方接口在连接器中如何配置参考文档：**

[ https://weapp.eteams.cn/sp/ebdpage/view/freepass/1152863419640021002?id=1159423015740514307&freepass_doc=1&space_id=1157961794811633670](https://weapp.eteams.cn/sp/ebdpage/view/freepass/1152863419640021002?id=1159423015740514307&freepass_doc=1&space_id=1157961794811633670)

# 二、支持版本

ecology 10版本

# 三、ESB中心相关配置

## 动作流A的配置：通过内置MQ发送组件发送页数数据

**动作流A整个动作流用到的组件有：** 触发组件（根据自己需求去选择，该场景选择的是简单定时器）+三方接口（返回查询的数据的总数）+变量赋值（根据总数以及需要每页返回的固定条数去计算出页数）+循环（循环计算出的页数）+内置MQ发送（在循环内部去添加，传递每次循环执行的页数值）

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234779698729615364&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

1、

三方接口：通过查第一页第一条数据的方式返回所有的总数的数值参数值（页数和条数设置为1是为了避免查数据过多时内存超出限制，而我们当前接口需要获取的只是一个总数的数值，不需要列表数据）

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234780381742252034&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234780501976170502&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

2、变量赋值：添加变量赋值，变量名称为页数；根据总数以及需要每页返回的固定条数去计算出页数，通过函数去实现；该场景固定是每页返回20条（后面配置所有地方包含内置监听MQ中需要设置每页条数时要和这里保持一致）

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234780716543385624&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

3、循环：选择按指定数值循环方式，循环次数为页数，即变量赋值计算出的结果页数；每循环一次给内置MQ发送组件传当前执行的第几页页数

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234780849918853126&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

4、内置MQ发送：在循环内部添加内置MQ发送组件，设置唯一的队列名称以及设置需要传递的页数参数（在动作流B中的内置MQ监听组件中的队列名称和参数要和内置MQ发送组件保持一致）；由于循环是从0开始的，所以页数要通过函数去计算，已循环次数+1

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234781137581826053&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

## 动作流B的配置：监听动作流A发送来的页数，然后查询每页数据进行新增或更新

**动作流B整个动作流用到的组件有：** 内置MQ监听（设置和动作流A中内置MQ发送组件一样的队列名称和参数名，获取传递来的当前页数）+三方接口（根据内置MQ监听获取到的页数赋值到接口的页数参数中，获取当前页数的数据）+新建表单数据（将DML查询出的数据插入到EB表单中）

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234782400247267343&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

1、内置MQ监听：输入和内置MQ发送组件一样的队列名称和参数名

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234782468954578951&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

2、三方接口：根据内置MQ监听获取到的页数赋值到接口的页数参数中，获取当前页数的数据

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234782769755856902&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

3、新建表单数据：将三方接口执行后返回的数据批量插入到EB表单

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234772904066187268&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

 

# 五、效果

**前提：** 该场景需要插入到EB表单的所有数据的总数是89条，按照上面的配置每页插入20条，所以一共是5页，也就是动作流A需要循环5次，动作流B需要执行5次

触发执行动作流A后，可从报文中看循环的次数以及从报文看每次循环传递过去的页数

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234783650131877895&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234809385609469955&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234809604636024838&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

触发执行动作流A后，动作流B需要执行5次，分5批插入到EB表单中

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234809716310163463&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234809828042637320&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

# 六、导入包
