轻易云平台助力高效数据集成:案例解析

  • 轻易云集成顾问-彭萍
### 案例分享:金蝶云星空数据集成到云水聚 在“物料对接业务系统-ok”方案的实施过程中,我们成功解决了如何将金蝶云星空的数据高效、可靠地集成到云水聚的问题。本文将主要分享该案例中的关键技术细节,特别是如何调用金蝶云星空的executeBillQuery接口,从源头获取准确无误的数据,并使用轻易云平台实现全流程自动化处理。 为了确保数据不漏单,我们采用定时任务调度机制,定期抓取金蝶云星空的接口数据。通过调用executeBillQuery接口,可以实现对数据分页和批量处理,有效应对限流问题。在抓取过程中,为保证每条记录都被完整提取,还增加了实时监控和日志记录功能,如遇异常可即时重试。 在大量数据快速写入到云水聚方面,通过优化API调用以及并发控制,加速了/Kingdee/EditMaterial接口的数据写入速度。同时,通过轻易云平台提供的自定义映射和格式转换功能,我们有效解决了两系统之间的数据格式差异,使得不同维度的数据能够顺利对接。 此次项目还特别关注错误处理与重试机制,实现高度可靠性的同时减少可能出现的手工干预需求。这不仅提高了工作效率,也提升了整个系统运行过程中的稳定性和安全性。 后续内容,将详细解析每个环节中具体操作步骤及实际代码示例。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D21.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统的API接口是数据集成生命周期的第一步。本文将详细探讨如何通过调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与调用 首先,我们需要配置元数据,以便正确调用金蝶云星空的`executeBillQuery`接口。以下是一个典型的元数据配置示例: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FNumber", "id": "FMATERIALID", "name": "FName", "idCheck": true, "request": [ {"field":"FMATERIALID","label":"实体主键","type":"int","describe":"实体主键","value":"FMATERIALID"}, {"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"}, {"field":"FSpecification","label":"规格型号","type":"string","describe":"规格型号","value":"FSpecification"}, {"field":"FOldNumber","label":"旧物料编码","type":"string","describe":"旧物料编码","value":"FOldNumber"}, {"field":"FBARCODE","label":"条码","type":"string","describe":"条码","value":"FBARCODE"}, {"field":"FDescription","label":"描述","type":"string","describe":"描述","value":"FDescription"}, {"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","describe":"物料分组","value":"FMaterialGroup.FNumber"}, {"field":"FErpClsID","label":"物料属性","type":"","describe":"","value":""}, {"field":...} ], "otherRequest": [ {"field":...} ], "autoFillResponse": true } ``` #### 请求参数解析 在上述配置中,`request`字段定义了请求参数,这些参数将用于构建API请求。以下是一些关键字段及其含义: - `FMATERIALID`: 实体主键,用于唯一标识物料。 - `FNumber`: 编码,物料的唯一编号。 - `FName`: 名称,物料的名称。 - `FSpecification`: 规格型号,描述物料的具体规格和型号。 - `FOldNumber`: 旧物料编码,用于兼容旧系统中的物料编号。 此外,还有一些其他重要字段,如`FBARCODE`(条码)、`FDescription`(描述)等,这些字段可以根据业务需求进行调整。 #### 构建请求体 根据元数据配置,我们可以构建一个完整的请求体。例如: ```json { "FormId": "BD_MATERIAL", "FieldKeys": ["FMATERIALID", "FNumber", "FName", ...], "FilterString": "FApproveDate>='2023-01-01' and FDocumentStatus='C' and FUseOrgId.FNumber=100", "Limit": 100, "StartRow": 0 } ``` 在这个请求体中: - `FormId` 指定了业务对象表单Id,这里为"BD_MATERIAL"。 - `FieldKeys` 是需要查询的字段集合,可以根据实际需求进行调整。 - `FilterString` 用于过滤条件,例如只查询2023年1月1日之后审批通过且使用组织编号为100的数据。 - `Limit` 和 `StartRow` 用于分页控制。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。常见的数据清洗操作包括: 1. **去除冗余字段**:只保留业务需要的字段。 2. **格式转换**:将日期、数值等字段转换为标准格式。 3. **数据校验**:确保所有必填字段都有值,并符合预期格式。 例如,对于日期字段,可以使用以下代码进行格式转换: ```python import datetime def convert_date(date_str): return datetime.datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y-%m-%d') data['approve_date'] = convert_date(data['approve_date']) ``` #### 数据写入目标系统 最后,将清洗和转换后的数据写入目标系统。这一步通常涉及到调用目标系统的API接口,并传递处理后的数据。例如: ```python import requests url = 'https://target-system-api.com/data' headers = {'Content-Type': 'application/json'} response = requests.post(url, json=cleaned_data, headers=headers) if response.status_code == 200: print('Data successfully written to target system') else: print('Failed to write data to target system') ``` 通过以上步骤,我们实现了从金蝶云星空获取、清洗、转换并写入目标系统的数据集成过程。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入云水聚API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台云水聚API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台实现这一过程。 #### 1. 数据提取与清洗 首先,我们需要从源系统中提取原始数据,并进行必要的清洗和预处理。这一步骤确保了数据的完整性和一致性,为后续的转换和加载奠定基础。 ```json { "FNumber": "P001", "FName": "净水器", "FSpecification": "型号A", "F_CY_Producttype": "售后物料", "F_WDZN__CY_Machinetype": "主机", "F_CY_Productcategory": "家用", "F_WDZN__CY_Watertype": "NB物联网", "F_WDZN__CY_Salemode": "卖断", "F_WDZN__CY_Salerange": "公开", "F_WDZN__CY_Issale": "是", "F_WDZN__CY_Brand": "品牌A", "FBaseUnitId_FNumber": "个" } ``` #### 2. 数据转换 在数据转换阶段,我们需要根据云水聚API接口的要求,将源数据字段映射到目标字段。以下是元数据配置示例: ```json { "api": "/Kingdee/EditMaterial", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"productId","label":"物料编码","type":"string","value":"{FNumber}"}, {"field":"productName","label":"物料名称","type":"string","value":"{FName}"}, {"field":"model","label":"规格型号","type":"string","value":"{FSpecification}"}, {"field":"productCategory","label":"产品类型","type":"string","describe":"(售后物料、水机产品、成品滤芯)","value":"{F_CY_Producttype}"}, {"field":"machineType","label":"机器类型","type":"string","describe":"(主机、分机)","value":"{F_WDZN__CY_Machinetype}"}, {"field":"productType","label":"产品归类","type":"string","describe":"(商用、家用)","value":"{F_CY_Productcategory}"}, {"field":"waterFillingMethod","label":"充水方式","type":"string","describe":"(NB物联网)","value":"{F_WDZN__CY_Watertype}"}, {"field":"saleModel","label":"销售模式","type":"string","describe":"(卖断、租赁)","value":"{F_WDZN__CY_Salemode}"}, {"field":"saleRange","label":"销售范围","type":"string","describe":"(公开、授权)","value":"{F_WDZN__CY_Salerange}"}, {"field":"isSale","label":"是否在售","type":"string","describe":"(是、否)","value":"{F_WDZN__CY_Issale}"}, {"field":"brand","label":"品牌","type":"","value":{"brand"}}, {"field":"","label":"","type":"","value":{"unit"}}, {"field":"","label":"","type":"","value":{"inventoryQty"}} ] } ``` 通过上述配置,我们可以将源系统中的字段`"FNumber"`映射到目标系统中的`"productId"`,以此类推。这样做确保了数据在不同系统之间的一致性和准确性。 #### 3. 数据加载 最后一步是将转换后的数据通过API接口写入目标系统。以下是一个示例HTTP请求: ```http POST /Kingdee/EditMaterial HTTP/1.1 Host: api.yunshuiju.com Content-Type: application/json Authorization: Bearer your_access_token { "productId": "{FNumber}", "productName": "{FName}", "model": "{FSpecification}", ... } ``` 在实际操作中,我们可以利用轻易云的数据集成平台自动生成并发送这些请求,从而实现高效的数据加载。 #### 4. 实时监控与异常处理 为了确保整个ETL过程的顺利进行,我们需要对每个环节进行实时监控。一旦发现异常情况,如网络故障或数据格式错误,系统应及时发出警报并记录日志,以便后续排查和修复。 通过上述步骤,我们可以高效地完成从源系统到目标系统的数据ETL转换,并确保数据的一致性和准确性。这不仅提升了业务流程的透明度和效率,还为企业决策提供了可靠的数据支持。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)