ETL转换与数据清洗:轻易云助力金蝶云与旺店通整合

  • 轻易云集成顾问-姚缘
### 案例分享:金蝶云星空至旺店通·企业奇门的数据集成与优化 在实际业务环境中,如何高效地实现从金蝶云星空到旺店通·企业奇门的系统数据对接,是众多企业面临的挑战。本文将详细探讨一个具体的集成案例,通过使用轻易云数据集成平台,实现物料数据从金蝶云星空平滑迁移到旺店通·企业奇门,并确保稳定可靠的数据处理过程。 首先,要解决的问题是如何利用金蝶云星空提供的executeBillQuery接口进行定时、可靠的数据抓取。通过配置轻易云的平台,我们能够按照预设的时间间隔,定时调用这一API接口,从而获取最新的物料信息。同时,为了避免因接口限流或分页问题导致的数据丢失,我们对每次的数据请求进行了日志记录与状态监控,确保每一条记录都有据可查。 其次,在将大量数据快速且准确地写入到旺店通·企业奇门时,我们采用wdt.goods.push API。在此过程中,不仅需要考虑批量数据写入以提升效率,还需处理两套系统之间可能存在的数据格式差异。例如,会计科目编码等字段在两个系统中的格式不一致,这就需要我们通过自定义映射规则,对传输过来的数据进行预处理和转换。 最后,对于整个流程异常和错误重试机制设计也是至关重要的一环。当出现网络延迟、中断或者API返回错误码等情况时,我们设置了完善的异常捕获逻辑,并结合自动重试机制,以保障整个链路尽量不受偶发性故障影响。此外,同步完成后实时更新状态并生成详细日志,使得运维人员可以全面掌握同步过程中的每个细节与潜在问题。这不仅提高了日常维护的便捷性,也为未来类似项目提供了宝贵经验参考。 以上初步介绍即展示了本案例关键技术点及其实施方案细节,让我们深入探讨具体实现步骤以及可能遇见的问题解法。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/D3.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取并加工物料数据。 #### 接口配置与请求参数 首先,我们需要了解`executeBillQuery`接口的基本配置和请求参数。根据提供的元数据配置,接口的主要参数如下: - **API名称**: `executeBillQuery` - **请求方法**: `POST` - **业务对象表单ID**: `BD_MATERIAL` - **请求字段**: - `FMATERIALID`: 实体主键 - `FNumber`: 编码 - `FName`: 名称 - `FSpecification`: 规格型号 - `FOldNumber`: 旧物料编码 - `FBARCODE`: 条码 - `FDescription`: 描述 - ...(其他字段详见元数据配置) 此外,还有一些分页和过滤条件参数,例如: - `Limit`: 最大行数 - `StartRow`: 开始行索引 - `FilterString`: 过滤条件(如:`FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FCheckBox_TBWDT= '1'`) #### 调用接口获取数据 在轻易云数据集成平台中,我们可以通过以下步骤来调用该接口并获取数据: 1. **配置API请求**: 在平台的可视化界面中,选择“新增API请求”,并填写上述API名称、请求方法和业务对象表单ID等基本信息。 2. **设置请求参数**: 根据元数据配置中的字段信息,逐一添加请求参数。例如: ```json { "FormId": "BD_MATERIAL", "FieldKeys": ["FMATERIALID", "FNumber", "FName", "FSpecification"], "FilterString": "FApproveDate>='2023-01-01' and FCheckBox_TBWDT= '1'", "Limit": "100", "StartRow": "0" } ``` 3. **发送请求并处理响应**: 配置完成后,发送API请求,并处理返回的数据。轻易云平台会自动解析响应结果,并根据预先定义的映射规则进行数据清洗和转换。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以满足目标系统的需求。以下是一些常见的数据清洗与转换操作: 1. **字段映射**: 将源系统的字段映射到目标系统。例如,将金蝶云星空的`FMATERIALID`映射到目标系统的`MaterialID`。 2. **数据格式转换**: 根据目标系统要求,对日期、数值等字段进行格式转换。例如,将日期格式从`YYYY-MM-DD`转换为`MM/DD/YYYY`。 3. **过滤无效数据**: 去除不符合业务规则的数据。例如,过滤掉禁用状态为“禁用”的物料。 4. **合并与拆分字段**: 根据业务需求,对某些字段进行合并或拆分。例如,将多个描述性字段合并为一个详细描述字段。 #### 实例代码示例 以下是一个简单的Python示例代码,用于调用金蝶云星空接口并处理响应数据: ```python import requests # API URL 和 请求头部信息 url = 'https://api.kingdee.com/executeBillQuery' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } # 请求参数 payload = { "FormId": "BD_MATERIAL", "FieldKeys": ["FMATERIALID", "FNumber", "FName", "FSpecification"], "FilterString": "FApproveDate>='2023-01-01' and FCheckBox_TBWDT= '1'", "Limit": 100, "StartRow": 0 } # 发起POST请求 response = requests.post(url, json=payload, headers=headers) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据处理逻辑,例如清洗、转换等 for item in data: material_id = item['FMATERIALID'] number = item['FNumber'] name = item['FName'] specification = item['FSpecification'] # 更多处理逻辑... else: print(f"Error: {response.status_code}, {response.text}") ``` 通过上述步骤,我们可以高效地调用金蝶云星空接口获取物料数据,并在轻易云平台上完成后续的数据清洗与转换工作。这不仅提升了数据集成效率,也确保了业务流程的顺畅运行。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与写入旺店通·企业奇门API接口 在数据集成生命周期的第二步,关键任务是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台完成这一过程。 #### 数据请求与清洗 在开始ETL转换之前,首先需要从源系统中提取数据并进行初步清洗。假设我们已经完成了这一阶段,并获得了一个包含物料信息的数据集。接下来,我们将重点放在如何将这些数据转换为旺店通·企业奇门API接口所需的格式。 #### 元数据配置解析 根据提供的元数据配置,我们可以看到目标API接口`wdt.goods.push`需要通过POST方法发送请求。请求参数包含一个名为`goods_list`的数组节点,该节点包含SPU(标准产品单元)的所有属性信息。此外,每个SPU还包含一个名为`spec_list`的子数组节点,用于存储SKU(库存单位)的属性信息。 以下是元数据配置中的关键字段及其描述: - `goods_no`: 货品编号 - `goods_type`: 货品类别 - `goods_name`: 货品名称 - `short_name`: 货品简称 - `alias`: 货品别名 - `pinyin`: 拼音名称 - `origin`: 产地 - `class_name`: 分类 - `brand_name`: 品牌名称 - `unit_name`: 基本单位 - `remark`: 备注 - `props1`至`props6`: 自定义属性1至6 子节点`spec_list`中的关键字段包括: - `spec_no`: 商家编码 - `spec_code`: 规格码 - `barcode`: 主条码 - `spec_name`: 规格名称 - `is_allow_neg_stock`: 是否允许负库存 - `is_sn_enable`: 是否启用序列号 - `spec_unit_name`: 基本单位名称 - `weight`, `length`, `width`, `height`: 重量、长、宽、高等物理属性 #### 数据转换 为了实现数据转换,我们需要编写一个ETL脚本,将源数据映射到上述字段中。以下是一个示例脚本,用于将源数据转换为目标API所需的格式: ```python import json # 假设从源系统提取的数据如下: source_data = [ { "FTextSuXingBM": "12345", "FName": "商品A", "F_LJT_Assistant_PL_FNumber": "分类1", "FAssistant_PingPai_FNumber": "品牌A", "FBaseUnitId_FNumber": "个", "FAssistantYJPL_FNumber": "自定义1", "FAssistantErJPL_FNumber": "自定义2", "FCategoryID_FName": "类别A", # SKU相关字段... }, # 更多商品... ] # 转换后的目标格式: target_data = { "goods_list": [] } for item in source_data: goods_item = { "goods_no": item["FTextSuXingBM"], "goods_type": "1", # 固定值,表示销售商品 "goods_name": item["FName"], "class_name": item["F_LJT_Assistant_PL_FNumber"], "brand_name": item["FAssistant_PingPai_FNumber"], "unit_name": item["FBaseUnitId_FNumber"], "props1": item["FAssistantYJPL_FNumber"], "props2": item["FAssistantErJPL_FNumber"], "props3": item["FCategoryID_FName"], # 添加更多字段映射... } # 假设每个商品有多个SKU,需要进一步处理spec_list子节点: goods_item["spec_list"] = [ { # 映射SKU相关字段... # 示例:假设每个商品只有一个SKU,实际情况可能需要循环处理多个SKU。 "spec_no": item["FTextSuXingBM"], # 更多SKU字段映射... } ] target_data["goods_list"].append(goods_item) # 将转换后的数据转为JSON格式,以便POST请求发送: json_data = json.dumps(target_data, ensure_ascii=False) print(json_data) ``` #### 数据写入 完成数据转换后,我们需要通过HTTP POST方法将JSON格式的数据发送到旺店通·企业奇门API接口。可以使用Python中的requests库来实现这一操作: ```python import requests url = 'https://api.wangdian.cn/openapi2/goods_push.php' headers = {'Content-Type': 'application/json'} response = requests.post(url, headers=headers, data=json_data) if response.status_code == 200: print("Data successfully pushed to WDT API") else: print(f"Failed to push data: {response.text}") ``` 以上代码展示了如何利用轻易云数据集成平台进行ETL转换,并将转换后的数据写入到旺店通·企业奇门API接口。这一过程确保了不同系统间的数据无缝对接,实现了高效的数据管理和业务流程优化。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)