数据高效传输:金蝶云至马帮系统的集成技术方案

  • 轻易云集成顾问-吴伟
### 物料同步金蝶=》马帮-新:实现无缝数据集成 在实施“物料同步金蝶=》马帮-新”项目中,我们成功地将金蝶云星空的物料数据无缝对接到马帮平台,充分发挥了轻易云数据集成平台的优势。本文将详细解析这一过程中所采用的技术方案和具体实现细节。 为确保金蝶云星空的数据能够准确、快速地传输至马帮,我们首先调用了executeBillQuery API接口,从金蝶云星空抓取所需的物料信息。这一过程通过定时任务进行调度,保证数据实时性与可靠性,同时避免漏单现象。在实际操作中,对于分页和限流问题我们设计了一套完善的处理机制,以应对API接口限流带来的潜在影响。 为了保障大量数据能高效写入到马帮系统,我们使用了stock-do-add-stock API接口,并进行了批量集成处理,通过并行化操作大幅提升了写入速度。此外,为处理两端系统间的数据格式差异,我们制定了严格的数据映射规则,实现了精准匹配。针对可能发生的数据传输错误及异常情况,则设置自动重试机制和异常日志记录系统,以最大程度上减少人工干预,提高稳定性。 以下内容将进一步深入探讨这些关键技术点及其实现方法。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`,获取并加工物料数据。 #### 接口配置与调用 首先,我们需要根据元数据配置`metadata`来设置接口调用参数。以下是关键配置项的解析: - **API**: `executeBillQuery` - **Method**: `POST` - **FormId**: `BD_MATERIAL` 这些参数定义了我们要调用的API类型、请求方法以及目标表单ID。 #### 请求参数设置 根据元数据配置,我们需要构建请求体,其中包含多个字段和分页参数。以下是请求体的主要部分: ```json { "FormId": "BD_MATERIAL", "FieldKeys": [ "FMATERIALID", "FNumber", "FName", "FSpecification", "FOldNumber", "FBARCODE", "FDescription", "FMaterialGroup.FNumber", "FErpClsID", ... ], "FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND FMaterialGroup.FNumber IN ('CGGYK','GYCTK','MG','MK','TJ','XKDWQ','CGJYK','JYCTK','JYMK','FPQT','KZT','SX','XJ','DSP','GYJ','SFFYGQD','CPX7-KSZJ','YJ') AND FForbidStatus='A'", "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}" } ``` 上述请求体中,`FieldKeys`字段列出了需要查询的所有字段,而`FilterString`则用于过滤符合条件的数据。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗操作: 1. **字段映射**:将金蝶云返回的数据字段映射到目标系统所需的字段。例如,将`FMATERIALID`映射为目标系统中的物料ID。 2. **数据格式转换**:将日期格式从金蝶云的格式转换为目标系统所需的格式。 3. **数据过滤**:移除不符合业务规则的数据,例如状态为禁用的物料。 具体实现可以通过编写脚本或使用轻易云平台提供的数据处理工具来完成。 #### 实际案例 假设我们需要同步金蝶云中的物料信息到马帮系统,以下是一个实际案例: 1. **构建请求体**: ```json { "FormId": "BD_MATERIAL", "FieldKeys": [ "FMATERIALID", "FNumber", "FName", ... ], "FilterString": "FApproveDate>='2023-01-01' AND FMaterialGroup.FNumber IN ('CGGYK', 'GYCTK') AND FForbidStatus='A'", "Limit": 100, "StartRow": 0 } ``` 2. **发送请求并接收响应**: ```python import requests url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} response = requests.post(url, json=request_body, headers=headers) if response.status_code == 200: data = response.json() # 处理返回的数据 else: print(f"Error: {response.status_code}") ``` 3. **数据清洗与转换**: ```python cleaned_data = [] for item in data['Result']: cleaned_item = { 'material_id': item['FMATERIALID'], 'number': item['FNumber'], 'name': item['FName'], # 更多字段映射... } cleaned_data.append(cleaned_item) # 将清洗后的数据写入目标系统 ``` 通过以上步骤,我们可以高效地从金蝶云星空获取物料信息,并进行必要的数据清洗和转换,为后续的数据写入做好准备。这种方法不仅提高了数据处理的效率,还确保了数据的一致性和准确性。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶到马帮的物料同步 在数据集成生命周期的第二步中,关键任务是将从源平台(如金蝶)获取的数据进行ETL转换,使其符合目标平台(如马帮API接口)的格式要求,并最终写入目标平台。以下是具体的技术实现过程。 #### 元数据配置解析 在进行ETL转换之前,首先需要理解元数据配置。这些配置定义了如何将源平台的数据字段映射到目标平台API所需的字段格式。以下是本次集成方案中的元数据配置: ```json { "api": "stock-do-add-stock", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "stockSku", "label": "库存sku", "type": "string", "describe": "111", "value": "{FNumber}"}, {"field": "nameCN", "label": "商品名称", "type": "string", "value": "{FName}"}, {"field": "status", "label": "商品状态", "type": "string", "describe": "1.自动创建 2.待开发 3.正常 4.清仓 5.停止销售", "value": "3"}, {"field": "warehouseData", "label": "仓库信息json格式字符串", "type": "array", "children":[{"field":"name","label":"仓库名称","type":"string","value":"马桥仓库"}] }, {"field": "length", "label": "长", "type": "string", "value": "{FLENGTH}"}, {"field": "width", ",label":"宽","type":"string","value":"{FWIDTH}"}, {"field":"height","label":"高","type":"string","value":"{FHEIGHT}"}, {"field":"weight","label":"重量","type":"string","value":"{FNETWEIGHT}"}, {"field":"parentCategoryName","label":"一级目录名称","type":"string"}, {"field":"categoryName","label":"二级目录名称","type":"string"}, {"field":"FMaterialGroup_FName","label":"FMaterialGroup_FName","type":"string","value":"{FMaterialGroup_FName}"} ] } ``` #### 数据请求与清洗 首先,从金蝶系统中请求所需的数据,并进行初步清洗和转换。假设从金蝶系统中获取到的数据如下: ```json { FNumber: '12345', FName: '样品商品', FLENGTH: '10', FWIDTH: '20', FHEIGHT: '30', FNETWEIGHT: '1.5', FMaterialGroup_FName: '电子产品' } ``` #### 数据转换与写入 根据元数据配置,将上述数据转换为符合马帮API接口要求的格式。具体步骤如下: 1. **字段映射**:根据元数据配置,将金蝶系统中的字段映射到马帮API所需的字段。例如,`FNumber` 映射为 `stockSku`,`FName` 映射为 `nameCN` 等。 2. **固定值设置**:对于一些固定值字段,如 `status`,直接设置为预定值 `3`。 3. **嵌套结构处理**:对于嵌套结构,如 `warehouseData`,需要按照元数据配置构造相应的JSON格式字符串。 最终生成的请求体如下: ```json { stockSku: '12345', nameCN: '样品商品', status: '3', warehouseData: [ { name: '马桥仓库' } ], length: '10', width: '20', height: '30', weight: '1.5', parentCategoryName: '', categoryName: '', FMaterialGroup_FName: '电子产品' } ``` #### API调用 使用HTTP POST方法将上述请求体发送到马帮API接口 `stock-do-add-stock`。示例代码如下: ```javascript const axios = require('axios'); const requestData = { stockSku: '12345', nameCN: '样品商品', status: '3', warehouseData: [ { name: '马桥仓库' } ], length: '10', width: '20', height: '30', weight: '1.5', parentCategoryName: '', categoryName: '', FMaterialGroup_FName:'电子产品' }; axios.post('https://api.mabang.com/stock-do-add-stock', requestData) .then(response => { console.log('成功:', response.data); }) .catch(error => { console.error('错误:', error); }); ``` 通过上述步骤,我们完成了从金蝶到马帮的数据ETL转换和写入过程。在实际操作中,还需要考虑错误处理、日志记录等细节,以确保整个流程的稳定性和可靠性。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)