# DML组件查询量过多同步方案场景

来源快照：`result_data_new_260518.json`

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

## 正文

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

通过DML组件查询数据量较大时如何通过分页方式将数据插入到EB表单

# 一、编写目的

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

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

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

2、动作流B：内置监听MQ组件获取从内置MQ发送组件传来的页数，通过DML的页数计算出偏移量，再根据DML分页查询的语法方式，每次只执行当前页的数据

# 二、支持版本

ecology 10版本

# 三、ESB中心相关配置

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

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

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234764614926524430&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、

DML组件：计算出需要查询的表的数据的总数

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234765044401864711&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、变量赋值：添加变量赋值，变量名称为页数；根据总数以及需要每页返回的固定条数去计算出页数，通过函数去实现；该场景固定是每页返回10条（后面配置所有地方包含内置监听MQ中需要设置每页条数时要和这里保持一致）

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234765443795664903&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=1234766040738226183&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=1234767011361464322&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发送组件一样的队列名称和参数名，获取传递来的当前页数）+变量赋值（根据当前页数和每页固定的条数去计算SQL语句中分页语法需要的偏移量）+DML组件（根据变量赋值的偏移量以及查询分页数据的语法方式，查询当前页的数据）+新建表单数据（将DML查询出的数据插入到EB表单中）

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234770597583659023&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=1234771052955844619&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、变量赋值：添加变量赋值，名称为偏移量，根据页数和每页固定条数去计算mysql数据库分页查询时需要的偏移量（10为固定的每页查询的条数）

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234771546801586188&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、DML组件：通过查询语句，查询传来的当前页下的所有数据；pyl动态参数设置为数字类型

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234772023585726479&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)

注：当前DML语句分页查询的语法方式是myql数据库的语法，如果用的是非mysql数据库可自行百度下不同数据库下分页查询的语法

4、新建表单数据：将DML组件查询出来的数据批量插入到EB表单

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234772822566256659&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=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表单的所有数据的总数是34条，按照上面的配置每页插入10条，所以一共是4页，也就是动作流A需要循环4次，动作流B需要执行4次

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

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234774592104570893&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=1234773883473510409&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=1234774080810524683&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需要执行4次，分4批插入到EB表单中

![](https://weapp.eteams.cn/papi/file/preview?fileId=1234773969381244936&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=1234774437407678467&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)

# 六、导入包
