生产入库数据高效集成至新宝平台的技术实践

  • 轻易云集成顾问-胡秀丛
### 金蝶云星空数据集成到新宝-产业链协同平台:生产入库对接 在企业数字化转型的过程中,系统间的数据集成是一个关键环节。本文将详细介绍金蝶云星空与新宝-产业链协同平台之间的生产入库对接技术方案。 为实现高效的数据集成,我们选择使用executeBillQuery接口从金蝶云星空获取生产入库数据,并通过/production/inhouse接口将数据写入到新宝-产业链协同平台中。本次集成的核心目标包括确保数据不漏单、快速批量写入以及定时可靠地抓取数据。 首先,我们需要处理来自金蝶云星空API接口的分页和限流问题。这一步骤至关重要,它不仅可以保证每个批次的数据都被完整获取,还能避免触发API访问限制,从而提高整体运行效率。此外,为了解决两者之间的数据格式差异,我们采用了自定义的数据转换逻辑,将原始数据映射到符合新宝-产业链协同平台要求的结构。 为了确保任务顺利进行并及时发现潜在问题,本项目还引入了一套完善的监控和告警机制。实时跟踪每个步骤中的状态与性能,有助于快速识别并解决异常情况,而错误重试机制则进一步保障了整体流程的稳健性。 下一部分内容将深入解析具体实现过程,包括如何调用executeBillQuery接口、处理分页返回结果以及构建优化后的API请求,最终完成高效、安全且稳定的数据对接。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`来获取生产入库相关的数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到以下关键参数: - **API**: `executeBillQuery` - **Method**: `POST` - **Pagination**: 支持分页,默认每页500条记录 - **ID Check**: 启用ID检查 请求字段包括单据编号、客户订单号、收料组织、物料编码等。以下是一个典型的请求示例: ```json { "FormId": "PRD_INSTOCK", "FieldKeys": "FEntity_FEntryID,FMoEntrySeq,FID,FBillNo,F_GZHQ_Text_KHDDH,FStockOrgId.FNumber,F_GZHQ_Base_KH.FNumber,FMoBillNo,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,FMaterialId.F_GZHQ_Text_DXGG,FRealQty,FDate,FStockId.FNumber,FStockId.Fname,FMemo", "FilterString": "FApproveDate>='2023-01-01' and FMATERIALID.F_GZHQ_CheckBox5 = 1", "Limit": 500, "StartRow": 0 } ``` #### 数据请求与清洗 在发送请求后,我们会接收到一个包含多条记录的响应。这些记录需要经过清洗和转换,以确保数据的一致性和准确性。 1. **字段映射与转换**: - 将金蝶返回的数据字段映射到目标系统所需的字段。 - 根据业务需求对某些字段进行格式转换,例如日期格式、数值单位等。 2. **去重与验证**: - 使用`FEntity_FEntryID`作为唯一标识符,确保每条记录在目标系统中不重复。 - 验证关键字段是否为空或无效,例如单据编号`FBillNo`、物料编码`FMaterialId_FNumber`等。 3. **错误处理**: - 对于无法解析或缺失关键字段的数据,记录日志并跳过处理。 - 实时监控接口调用状态,捕获并处理异常情况,如网络超时、接口返回错误等。 #### 数据转换与写入 完成数据清洗后,需要将其转换为目标系统可接受的格式,并写入目标数据库或系统。这一步通常包括以下操作: 1. **数据格式化**: - 将清洗后的数据按照目标系统的要求进行格式化,例如JSON、XML等。 2. **批量写入**: - 为提高效率,可以采用批量写入方式,将多条记录一次性写入目标系统。 - 确保写入过程中的事务一致性,避免部分成功部分失败的情况。 3. **日志记录与监控**: - 记录每次写入操作的详细日志,包括成功和失败的记录数。 - 实时监控写入过程中的性能指标,如响应时间、吞吐量等。 #### 示例代码 以下是一个简化的示例代码,用于演示如何调用金蝶云星空接口并处理返回的数据: ```python import requests import json # 配置请求参数 url = "https://api.kingdee.com/executeBillQuery" headers = {"Content-Type": "application/json"} payload = { "FormId": "PRD_INSTOCK", "FieldKeys": ",".join([ "FEntity_FEntryID", "FMoEntrySeq", "FID", "FBillNo", "F_GZHQ_Text_KHDDH", "FStockOrgId.FNumber", "F_GZHQ_Base_KH.FNumber", "FMoBillNo", "FMaterialId.FNumber", "FMaterialId.FName", "FMaterialId.FSpecification", "FMaterialId.F_GZHQ_Text_DXGG", "FRealQty", "FDate", "FStockId.FNumber", "FStockId.Fname", "FMemo" ]), "FilterString": f"FApproveDate>='2023-01-01' and FMATERIALID.F_GZHQ_CheckBox5 = 1", "Limit": 500, "StartRow": 0 } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗与转换逻辑 cleaned_data = [] for record in data: cleaned_record = { 'id': record['FEntity_FEntryID'], 'order_number': record['FBillNo'], 'customer_order_number': record['F_GZHQ_Text_KHDDH'], 'material_code': record['FMaterialId_FNumber'], 'quantity': float(record['FRealQty']), 'date': record['FDate'] # 添加其他必要字段... } cleaned_data.append(cleaned_record) # 写入目标系统逻辑(示例) write_to_target_system(cleaned_data) else: print(f"Error: {response.status_code}, {response.text}") ``` 通过上述步骤,我们可以高效地从金蝶云星空获取生产入库相关的数据,并进行必要的清洗和转换,为后续的数据处理打下坚实基础。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 生产入库对接新宝-产业链协同平台API接口的ETL转换配置 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台新宝-产业链协同平台API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台的元数据配置,实现这一过程。 #### API接口配置 首先,我们需要了解目标平台API接口的基本信息。根据提供的元数据配置,目标API接口为`/production/inhouse`,请求方法为`POST`。我们需要确保请求的数据格式符合该API接口的要求。 ```json { "api": "/production/inhouse", "method": "POST", "idCheck": true, "sdk": "\\Adapter\\Donlim\\SDK\\DonlimSDK", "errorMsgKey": "msg", "request": [ { "label": "data", "field": "data", "type": "object", "children": [ {"field":"poRowId","label":"采购单行ID","type":"string","describe":"采购单行ID","value":"_findCollection find F_GZHQ_Text from 15e09f02-b866-307a-82c2-b5ea50a5e045 where F_GZHQ_Text_KHDDH={F_GZHQ_Text_KHDDH} FMaterialId_Fnumber={FMaterialId_FNumber}"}, {"field":"poRowNo","label":"采购订单行号","type":"string","describe":"采购订单行号","value":"_findCollection find F_GZHQ_Text1 from 15e09f02-b866-307a-82c2-b5ea50a5e045 where F_GZHQ_Text_KHDDH={F_GZHQ_Text_KHDDH}"}, {"field":"poNo","label":"采购订单号","type":"string","describe":"采购订单号","value":"{F_GZHQ_Text_KHDDH}"}, {"field":"orgName","label":"分厂名称","type":"string","describe":"分厂名称","value":"{F_GZHQ_Base_KH}"}, {"field":"supplyCode","label":"供应商编号","type":"string","describe":"供应商编号","value":"VHQ013"}, {"field":"supplyName","label":"供应商","type":"string","describe":"供应商","value":"广州环球电业电器有限公司"}, {"field":"productionNo","label":"生产工单号","type":"string","describe":"生产工单号","value":"{FMoBillNo}-{FMoEntrySeq}"}, {"field":"materialNo","label":"物料编码-供应商侧","type":"string","describe":"物料编码-供应商侧","value":"{FMaterialId_FName}"}, {"field":"materialName","label":"物料名称-供应商侧","type":"string","describe":"物料名称-供应商侧","value":"{FMaterialId_FSpecification}"}, {"field":"materialSpecification","label" ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)