ETL转换在金蝶生产入库单与管易采购入库单对接中的应用
### 金蝶云星空与管易云的数据集成——生产入库单对接采购入库单案例分享
在企业信息系统的复杂环境中,确保不同平台之间的数据高效、准确传输是迈向成功的重要一步。本文将详细解析一个实际项目:通过轻易云数据集成平台,实现金蝶云星空(以下简称“金蝶”)中的生产入库单数据顺利导入到管易云作为采购入库单。在这个过程中,会探讨如何处理API接口调用、数据格式差异、限流分页问题及异常重试机制等技术要点。
#### 数据抓取与实时监控
首先,在实现从金蝶获取生产入库单数据时,我们利用`executeBillQuery` API接口。为了确保所有关键业务数据不漏单,我们采用了定时任务调度,通过可靠的时间间隔来抓取接口返回的数据,并且配合轻易云提供的全生命周期管理功能进行实时监控和日志记录,一旦出现任何异常,可即时处理并重新尝试获取。
#### 大量数据的快速写入
面对从金蝶提取的大量数据信息,如何能迅速、高效地写入到管易成为一个必须解决的问题。这里我们使用了管易提供的批量写入API `gy.erp.purchase.arrive.add` 来完成大规模数据信息的一次性提交。同时,为了避免网络波动或其他因素导致传输失败,设计了一套完善的错误重试机制,当发生异常时,可以多次自动重试直至成功。
#### 数据格式转换与映射对接
由于金蝶与管易之间存在着较大的数据结构和字段命名差异,因此需要一套灵活而有效的数据格式转换方案。这部分工作由轻易云的平台特性很好地支持,包括自定义规则引擎和映射配置,使得两者之间的数据转换能够准确无误,大幅减少人工干预所带来的错误风险。
总结以及进一步细节将在后续章节详述,本篇旨在概述核心技术环节,为完整理解整个系统对接过程奠定基础。不论是在实战操作中还是策略制定阶段,这些关键步骤都是必不可少的基础支撑点。
![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工生产入库单的数据。
#### 接口配置与调用
首先,我们需要配置元数据以便正确调用金蝶云星空的`executeBillQuery`接口。以下是关键的元数据配置项:
- **api**: `executeBillQuery`
- **method**: `POST`
- **number**: `FBillNo`
- **id**: `FEntity_FEntryID`
- **request**: 包含具体请求字段,如实体主键、单据编号、物料编码等。
- **otherRequest**: 包含分页参数和过滤条件等。
这些配置项确保了我们能够准确地请求到所需的数据。
#### 请求字段解析
在请求字段中,我们需要特别关注以下几个关键字段:
1. **FEntity_FEntryID**: 实体主键,用于唯一标识每一条记录。
2. **FBillNo**: 单据编号,是生产入库单的唯一标识符。
3. **FMaterialId_FNumber**: 物料编码,用于标识具体的物料。
4. **FRealQty**: 实收数量,表示实际收到的物料数量。
5. **FDate**: 日期,记录生产入库单的日期信息。
这些字段在后续的数据清洗和转换过程中将起到至关重要的作用。
#### 其他请求参数
为了提高查询效率和准确性,我们还需要设置一些其他请求参数:
- **Limit** 和 **StartRow** 用于分页查询,确保一次性不会拉取过多数据,从而避免性能问题。
- **FilterString** 用于设置过滤条件,例如只查询特定供应商或特定日期之后的数据:
```sql
FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND F_QFBO_CheckBox_83g ='0' and (FMaterialId.FNumber like 'CP%' or FMaterialId.FNumber like 'XT-%')
```
这个过滤条件确保我们只获取最新且符合条件的数据。
#### 数据清洗与转换
获取到原始数据后,需要进行清洗和转换,以便写入目标系统。在这个过程中,我们可以利用轻易云平台提供的可视化工具进行操作。例如:
1. **字段映射**:将金蝶云星空中的字段映射到目标系统(如管易)的对应字段。例如,将`FBillNo`映射为采购入库单的单据编号,将`FRealQty`映射为实收数量等。
2. **数据格式转换**:根据目标系统要求,对日期、数字等字段进行格式转换。例如,将日期格式从`YYYY-MM-DD`转换为目标系统所需的格式。
3. **数据过滤与校验**:根据业务规则对数据进行过滤和校验。例如,排除不需要传输到管易的数据(通过检查`F_QFBO_CheckBox_83g`字段)。
#### 示例代码片段
以下是一个示例代码片段,展示如何通过API调用获取并处理数据:
```json
{
"api": "executeBillQuery",
"method": "POST",
"request": {
"FormId": "PRD_INSTOCK",
"FieldKeys": [
"FBillNo",
"FEntity_FEntryID",
"FMaterialId.FNumber",
"FRealQty",
"FDate"
],
"FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND F_QFBO_CheckBox_83g ='0'",
"Limit": "{PAGINATION_PAGE_SIZE}",
"StartRow": "{PAGINATION_START_ROW}"
}
}
```
通过上述配置和代码,我们可以高效地从金蝶云星空中获取生产入库单的数据,并进行必要的清洗和转换,为后续的数据写入做好准备。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行金蝶生产入库单到管易云采购入库单的ETL转换
在数据集成过程中,ETL(Extract, Transform, Load)是一个关键步骤,尤其是在不同系统之间的数据对接中。在本案例中,我们将重点探讨如何使用轻易云数据集成平台将金蝶的生产入库单数据转换为管易云采购入库单所需的格式,并通过API接口写入目标平台。
#### 数据请求与清洗
首先,从源系统(金蝶)中提取生产入库单的数据。这个过程涉及到多个字段的获取和初步清洗。以下是一些关键字段及其描述:
- `F_UTKU_po`:采购订单号
- `FStockId`:仓库代码
- `FPrdOrgId_FNumber`:供应商代码(需要转换)
- `FMaterialId_F_TBRT_Text_83g`:商品代码
- `FMaterialId_FSpecification`:商品规格代码
- `FRealQty`:数量
- `FMaterialId_F_UTKU_DECIMAL_QTR`:实际进价
- `FBillNo`:备注中的单据编号
#### 数据转换与写入
接下来,我们需要将上述字段转换为管易云API接口能够接受的格式。根据提供的元数据配置,以下是具体的字段映射和转换逻辑:
1. **采购订单号** (`purchase_code`)
```json
{"field":"purchase_code","label":"采购订单号","type":"string","describe":"采购订单号","value":"{F_UTKU_po}"}
```
直接映射金蝶中的`F_UTKU_po`字段。
2. **仓库代码** (`warehouse_code`)
```json
{"field":"warehouse_code","label":"仓库代码","type":"string","describe":"仓库代码","value":"{FStockId}"}
```
直接映射金蝶中的`FStockId`字段。
3. **供应商代码** (`supplier_code`)
```json
{"field":"supplier_code","label":"供应商代码","type":"string","describe":"供应商代码","value":"_function CASE '{FPrdOrgId_FNumber}' WHEN '103' THEN '036' WHEN '102' THEN '002' ELSE '非工厂供应商,错误' END"}
```
这里使用了一个CASE语句来根据不同的组织编号(`FPrdOrgId_FNumber`)进行供应商代码的转换。
4. **商品列表** (`detail_list`)
商品列表是一个数组,其中包含多个子项,每个子项代表一个商品。具体字段如下:
- 商品代码 (`item_code`)
```json
{"field":"item_code","label":"商品代码","type":"string","describe":"商品代码","value":"{FMaterialId_F_TBRT_Text_83g}"}
```
映射金蝶中的`FMaterialId_F_TBRT_Text_83g`字段。
- 商品规格代码 (`sku_code`)
```json
{"field":"sku_code","label":"商品规格代码","type":"string","describe":"商品规格代码","value":"{FMaterialId_FSpecification}"}
```
映射金蝶中的`FMaterialId_FSpecification`字段。
- 数量 (`qty`)
```json
{"field":"qty","label":"数量","type":"string","describe":"数量","value":"{FRealQty}"}
```
映射金蝶中的`FRealQty`字段。
- 实际进价 (`price`)
```json
{"field":"price","label":"实际进价","type":"string","describe":"实际进价","value":"{FMaterialId_F_UTKU_DECIMAL_QTR}"}
```
映射金蝶中的实际进价字段。
- 备注 (`note`)
```json
{"field":"note","label":"备注","type":"string","describe":"备注","value":"采购入库单-{FBillNo}"}
```
在备注中添加了固定前缀“采购入库单-”并拼接了单据编号。
5. **位置编码** (`location_code`)
```json
{"field": "location_code", "label": "location_code", "type": "string", "value": "{F_BigSun_PositionNo_Fnumber}"}
```
映射金蝶中的位置编码字段。
#### API调用与数据写入
完成上述字段映射和转换后,我们通过调用管易云的API接口将数据写入目标平台。根据元数据配置,API接口信息如下:
```json
{"api": "gy.erp.purchase.arrive.add", "effect": "EXECUTE", "method": "POST"}
```
具体操作方法为POST请求,将转换后的数据以JSON格式发送至管易云API接口。
#### 操作方法与模型构建
最后,通过操作方法和模型构建,将所有处理过的数据进行合并和整理,以确保每个请求都包含完整的信息结构:
```json
{"operation":{"method": "merge", "field": "FBillNo", "bodyName": "list",
"header":["FDate", "FPrdOrgId_FNumber", "FStockId", "F_UTKU_po", "FBillNo", "FID"],
"body":["FMaterialId_F_UTKU_DECIMAL_QTR", "FMaterialId_F_TBRT_Text_83g",
"FRealQty", "FMaterialId_FSpecification",
"FEntity_FEntryID",
"F_BigSun_PositionNo_Fnumber"]},
"buildModel": true}
```
通过上述步骤,我们实现了从金蝶生产入库单到管易云采购入库单的数据ETL转换,并成功写入目标平台。这不仅提高了数据处理效率,也确保了不同系统间的数据一致性和准确性。
![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)