优化数据集成流程:从金蝶云星空到旺店通的高效数据同步策略

  • 轻易云集成顾问-卢剑航
### 案例分享:金蝶云星空到旺店通·企业奇门的数据集成方案 在供应链管理中,实现数据的高效流转和准确同步是确保业务顺畅运行的重要环节。在本次案例中,我们将介绍如何通过轻易云数据集成平台,成功实现将金蝶云星空中的供应商数据精准、快速地同步到旺店通·企业奇门。此方案名为“供应商同步旺店通”。 #### 确保集成金蝶云星空数据不漏单 首先,利用金蝶云星空提供的API `executeBillQuery` 可以实时抓取最新的供应商信息。这一步骤至关重要,通过设置定时任务,我们可以定期查找并获取新增或更新的供应商记录,以保证每一条有效数据都被及时获取。同时,为解决接口分页和限流问题,可以通过多次请求与结果累计处理方式来实现分页调度,使得大批量的数据也能被完整、无遗漏地抓取。 #### 批量写入到旺店通·企业奇门 接下来,对于从金蝶云星空获取到的数据,需要一一对应映射到旺店通·企业奇门中。为了加速大量数据导入过程,我们使用了批量写入的方法,调用了 `wdt.purchase.provider.create` 这个接口,将收集来的所有供应商信息一次性上传至目标系统。这不仅提高了操作效率,还减少了网络传输时间。 #### 数据格式转换与映射对接 由于两个系统之间可能存在不同的数据格式要求,因此需要进行必要的格式转换。例如,某些字段在两端系统中的命名或类型可能不同,在提交前我们使用轻易云的平台特性来完成自动化的数据映射与转换,从而确保双方系统能够正确理解彼此的信息结构。此外,还要处理诸如字符编码、不合规符号等问题,以保证数据在传递过程中保持一致性。 ### 异常处理策略及重试机制 为保障整个流程尽可能零错误运行,一套完善的异常处理机制显然不可或缺。当遭遇网络中断、接口超时等异状时,该流程会自动触发重试功能。如果三次尝试后仍未成功,则记录错误日志,并通知相关维护人员立即介入排查。这样即使出现偶发故障,也不会影响整体工作进程,同时可以避免重要业务因技术问题被长时间延迟。 以上简单说明了一部分技术要点,下文将详细展示具体执行步骤以及代码示例,帮助大家更好地掌握这套解决方案。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取供应商数据,并对这些数据进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空接口的元数据。根据提供的元数据配置,我们可以看到该接口使用`POST`方法,主要参数包括供应商ID(FSupplierId)、编码(FNumber)、名称(FName)等。 ```json { "api": "executeBillQuery", "method": "POST", "number": "FNumber", "id": "FSupplierId", "pagination": { "pageSize": 100 }, "request": [ {"field":"FSupplierId","label":"FSupplierId","type":"string","value":"FSupplierId"}, {"field":"FNumber","label":"编码","type":"string","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","value":"FName"}, ... ], "otherRequest": [ {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"StartRow","label":"开始行索引","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, ... ] } ``` #### 构建请求体 在构建请求体时,需要根据元数据中的字段信息填充相应的值。以下是一个示例请求体: ```json { "FormId": "BD_Supplier", "FieldKeys": [ "FSupplierId", "FNumber", "FName", ... ], "FilterString": "FUseOrgId.fnumber='106' and FAuditDate>='2023-01-01'", "Limit": 100, "StartRow": 0 } ``` #### 调用接口 通过轻易云平台,我们可以使用以下代码片段来调用金蝶云星空的`executeBillQuery`接口: ```python import requests url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'BD_Supplier', 'FieldKeys': 'FSupplierId,FNumber,FName,...', 'FilterString': 'FUseOrgId.fnumber="106" and FAuditDate>="2023-01-01"', 'Limit': 100, 'StartRow': 0 } response = requests.post(url, headers=headers, json=payload) data = response.json() ``` #### 数据处理与清洗 获取到的数据通常需要进行清洗和转换,以便后续处理。假设我们从接口返回了如下数据: ```json [ ["VEN0001", "001", "供应商A", ...], ["VEN0002", "002", "供应商B", ...] ] ``` 我们可以将其转换为更易于处理的结构,例如字典列表: ```python processed_data = [] for item in data: processed_data.append({ 'FSupplierId': item[0], 'FNumber': item[1], 'FName': item[2], ... }) ``` #### 数据写入目标系统 经过清洗和转换的数据可以写入目标系统。在轻易云平台中,可以配置相应的数据写入操作,例如将处理后的供应商数据同步到旺店通系统。 ```python def write_to_target_system(data): for record in data: # 假设目标系统有一个API用于接收供应商数据 target_url = 'https://api.targetsystem.com/suppliers' response = requests.post(target_url, json=record) if response.status_code != 200: print(f"Failed to write record: {record['FSupplierId']}") write_to_target_system(processed_data) ``` 通过上述步骤,我们完成了从调用金蝶云星空接口获取数据,到对数据进行清洗和转换,再到将处理后的数据写入目标系统的全过程。这不仅提高了数据集成的效率,也确保了各个环节的数据准确性和一致性。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换:供应商同步至旺店通·企业奇门API接口 在数据集成生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。 #### API接口元数据配置 在进行ETL转换时,我们需要依据目标平台的API接口要求来配置相应的元数据。以下是针对旺店通·企业奇门API接口`wdt.purchase.provider.create`的元数据配置: ```json { "api": "wdt.purchase.provider.create", "method": "POST", "idCheck": true, "request": [ {"field": "provider_no", "label": "供应商编号", "type": "string", "describe": "代表供应商所有属性的唯一编码,用于供应商区分,ERP内支持自定义(ERP供应商界面设置),用于创建供应商数据信息", "value": "{FNumber}"}, {"field": "provider_name", "label": "供应商名称", "type": "string", "describe": "供应商名称", "value": "{FName}"}, {"field": "min_purchase_num", "label": "最小采购量", "type": "string", "describe": "最小采购量", "value":"1"}, {"field": "purchase_cycle_days", "label": "采购周期", "type": "string",  "describe":"采购周期","value":"1"}, {"field":"arrive_cycle_days","label":"到货周期","type":"string","describe":"到货周期","value":"1"}, {"field":"contact","label":"联系人","type":"string","describe":"联系人"}, {"field":"telno","label":"座机","type":"string","describe":"座机"}, {"field":"mobile","label":"移动电话","type":"string","describe":"手机号"}, {"field":"fax","label":"传真","type":"string","describe":"传真"}, {"field":"zip","label":"邮编","type":"string","describe":"邮政编码"}, {"field":"email","label":"邮箱","type":"string","describe":"电子邮箱"}, {"field":"qq","label":"qq","type":"string","describe":"腾讯QQ号码"}, {"field":"wangwang","label":"旺旺","type":"string","describe":"淘宝旺旺号"}, {"field":"address","label":"地址","type":"string","describe":"省、市、区(县)、地址详情"}, {"field":"website","label":"网址","type":"string","describe":"供应商官网地址"},    {"field":"last_purchase_time","label":"最后采购日期","type":"string","describe":"对供应商最后一次采购日期,不传默认接口创建供应商的年月日,格式:yyyy-MM-dd HH:mm:ss"},    {"field":"is_disabled","label":"停用","type":"string","describe":"是否停用"},    {"field":"charge_cycle_days","label":"结算周期","type":"string","describe":"对供应商的账款结算周期,单位(天),不传默认0"} ] } ``` #### ETL转换过程 1. **提取(Extract)**: 从源系统中提取原始数据,这些数据可能包含各种格式和结构。通过轻易云的数据集成平台,我们可以轻松地从多个异构系统中获取所需的数据。 2. **转换(Transform)**: 转换阶段是整个ETL过程的核心部分。在这一阶段,我们需要将提取到的数据按照目标API接口的要求进行转换。以下是一些关键字段的转换示例: - `provider_no`:将源系统中的供应商编号映射为目标系统中的`provider_no`字段。 - `provider_name`:将源系统中的供应商名称映射为目标系统中的`provider_name`字段。 - `min_purchase_num`、`purchase_cycle_days`、`arrive_cycle_days`等字段可以根据业务需求设置默认值或从源系统中提取相应的数据。 3. **加载(Load)**: 在完成数据转换后,将处理好的数据通过POST请求写入到目标平台——旺店通·企业奇门API接口。确保每个字段都按照API文档要求正确填充,并且符合数据类型和格式。 #### 示例代码 以下是一个简化的示例代码,用于展示如何进行ETL转换并调用API接口: ```python import requests import json # 源数据示例 source_data = { 'FNumber': '12345', 'FName': '某某供应商', } # 转换后的目标数据 target_data = { 'provider_no': source_data['FNumber'], 'provider_name': source_data['FName'], 'min_purchase_num': '1', 'purchase_cycle_days': '1', 'arrive_cycle_days': '1', } # API请求配置 api_url = 'https://api.wangdian.cn/openapi2/wdt.purchase.provider.create' headers = {'Content-Type': 'application/json'} # 发起POST请求 response = requests.post(api_url, headers=headers, data=json.dumps(target_data)) # 检查响应状态 if response.status_code == 200:    print('Data successfully loaded into target platform.') else:    print('Failed to load data:', response.text) ``` #### 总结 通过上述步骤,我们实现了从源平台到目标平台的数据ETL转换,并成功将处理后的数据写入到了旺店通·企业奇门API接口。这一过程不仅确保了数据的一致性和完整性,还提高了业务流程的自动化程度和效率。在实际应用中,根据具体业务需求,可以进一步优化和扩展ETL流程,以满足更复杂的数据集成场景。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)