# EB表单导入数据量过多导致动作流内存超出的优化配置方案  

来源快照：`result_data_new_260518.json`

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

## 正文

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

EB表单导入数据量过多导致动作流内存超出的优化配置方案  

 

一、

### 场景简介

通过EB导入按钮触发动作流以实现业务逻辑处理。由于导入数据量过大，动作流执行失败，原因是内存超出动作流最大运行内存限制。该场景可按照本文档的优化配置方案进行处理。

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

** **

**支持版本：**

本配置方案适用于ecology 10.0及以上版本

 

二、

### 动作流配置思路

由于批量导入的数据量过大会导致内存溢出，因此将数据拆成多个小批次，分批处理，这样每一批占用的内存就很小，自然就不会超限了。

设计两个动作流来分步配合完成：

【动作流A：数据分页调度】负责查询一共有多少条数据，然后按每页多少条来分页，算出需要分几页，接着循环一页一页地通知动作流B去处理。

【动作流B：分页数据处理】负责接收动作流A的消息通知，根据页码和批次号，把对应页的数据查出来，再执行相应的业务逻辑（比如更新表单、校验数据等）。

**动作流A：数据分页调度配置说明**

1、动作流拆分转换逻辑：点击导入按钮时，原触发方式会将全部导入数据传递给动作流，造成内存占用。因此采用EB按批次触发组件替换原有触发方式，该组件在导入时触发，不会传递全部数据，可有效节省内存。 

2、导入总数量查询：通过【数据源查询组件】根据导入批次号获取导入数据总条数，并开启【返回总数】功能。

3、分页规则配置：根据总页数及每页条数计算并生成页码

4、循环分发机制：根据计算得到的分页页码，通过消息队列（MQ）组件向动作流B发送包含页码、批次号参数的请求 

**动作流B：分页数据处理配置说明**

1、消息接收：通过MQ监听组件接收动作流A发送的页码、批次号消息，解析并获取当前处理的页码与批次号。 

2、数据分片查询：根据批次号、当前页参数执行分页查询，获取对应页的数据。

3、业务逻辑执行：按顺序调用业务规则引擎组件处理当前页数据。

三、

### 动作流详细配置步骤

#### **动作流A：数据分页调度**

![](https://weapp.eteams.cn/papi/file/preview?fileId=1255903069566672900&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表单导入按钮，添加动作，触发动作流按批次触发并新建动作流![](https://weapp.eteams.cn/papi/file/preview?fileId=1255903069365813271&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=1255903082384465928&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=1255976698056810507&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，以减少内存占用（只是为了查询总数）

\- 开启【返回总数】功能

第三步：新建变量【分页页码】，根据数据源查询返回的总数计算分页

通过ROUNDUP函数嵌套除法函数，即总数除以分页条数后向上取整，得到分页页码。

![](https://weapp.eteams.cn/papi/file/preview?fileId=1255903069419044880&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发送包含页码、批次号参数的请求

![](https://weapp.eteams.cn/papi/file/preview?fileId=1255903078114140164&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：分页数据处理**

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

第一步：新建内置MQ监听动作流，接收动作流A发送的页码、批次号消息；

![](https://weapp.eteams.cn/papi/file/preview?fileId=1255903073839841292&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=1255903078008979459&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第三步计算分页页数时的每页条数保持一致。

第三步：添加更新表单数据组件，根据分批查询的导入数据执行业务逻辑。

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

四、

### 展示效果

 

 导入352条数据，按每页50条分为8页查询处理，执行成功！

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

### 五、场景导入包
