ETL技术在金蝶云星空与旺店通WMS集成中的应用

  • 轻易云集成顾问-胡秀丛
### 金蝶云星空数据集成到旺店通WMS的技术案例分享 在数字化转型的背景下,现代企业对系统间的数据集成需求日益增加。本篇文章将以“组装入库=>其他入库单-1”方案为例,详细解析如何通过轻易云数据集成平台,实现金蝶云星空与旺店通WMS之间的数据高效流动。 首先,在这个跨系统数据对接过程中,我们需要确保从金蝶云星空获取的数据能够准确无误地写入到旺店通WMS。为了实现这一功能,本次方案主要采用了executeBillQuery和WDT_WMS_ENTRYORDER_CREATE这两个API接口。其中,executeBillQuery用于抓取金蝶云星空中指定条件下的业务单据数据,而WDT_WMS_ENTRYORDER_CREATE用来将这些业务单据创建为旺店通中的其他入库单。 ### 如何确保集成过程不漏单 在进行批量操作时,不容忽视的是如何避免数据遗漏和重复的问题。在本方案中,通过定时可靠的抓取机制,从金蝶云星空接口周期性拉取最新的业务流水,同时利用接口分页功能处理大数据量,提高检索效率。此外,为了解决限流问题,每次请求控制在限定数量内,并设计重试机制确保异常情况下也能够重新获取所需数据。 ### 处理两系统之间的数据格式差异 由于金蝶云星空和旺店通WMS使用不同的数据结构,因此需要建立一个有效的数据映射策略。借助轻易云平台提供的可视化配置工具,我们可以自定义字段映射关系,把从 executeBillQuery 接口获取的信息经过转换后,再传递给 WDT_WMS_ENTRYORDER_CREATE 接口。同时,这一过程支持实时监控与日志记录,使得每一次变更都能被清楚追踪并及时调整,有效提高操作透明度和准确性。 以上只是简要介绍了我们面对的一些核心技术挑战及解决思路,后续文章部分将深入剖析各个步骤具体实施方法以及遇到的问题与解决方案,以帮助读者更好地理解大型复杂业务场景中的系统集成实践。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口调用与元数据配置 首先,我们需要理解如何配置和调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "operation": { "method": "merge", "field": "FBillNo", "bodyName": "items", "bodySum": ["FQty"], "header": ["FBillNo"], "body": ["FMaterialID_FNumber", "FQty", "FLOT_FNumber", "FProduceDate", "FEXPIRYDATE"] }, ... } ``` #### 请求参数配置 在请求参数中,我们需要定义查询条件和分页参数。以下是一些关键字段及其描述: - `FilterString`: 用于过滤查询结果,例如 `FApproveDate>='{{MINUTE_AGO_30|datetime}}' AND FDocumentStatus = 'C' AND FStockID.F_JZJ_CheckBox=1 AND FAFFAIRTYPE = 'Assembly'`。 - `FieldKeys`: 定义需要查询的字段集合,例如 `["FID", "FBillNo", ...]`。 - `FormId`: 表单ID,例如 `"STK_AssembledApp"`。 这些参数确保我们能够精确地获取所需的数据。 #### 数据请求与清洗 在发起请求后,返回的数据可能包含多条记录。我们需要对这些数据进行清洗和处理。以下是一个示例代码片段,用于发起请求并处理响应: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'STK_AssembledApp', 'FieldKeys': ['FID', 'FBillNo', ...], 'FilterString': 'FApproveDate>=\'2023-01-01\' AND FDocumentStatus=\'C\'', 'Limit': 500, 'StartRow': 0 } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 清洗数据 cleaned_data = [] for record in data: cleaned_record = { '单据编号': record['FBillNo'], '物料编码': record['FMaterialID_FNumber'], ... } cleaned_data.append(cleaned_record) ``` #### 数据转换与写入 在清洗完数据后,需要将其转换为目标格式并写入目标系统。这里我们使用了`merge`操作,将相同单据编号的数据合并,并计算数量总和: ```json "operation": { "method": "merge", ... } ``` 具体实现可以如下: ```python merged_data = {} for record in cleaned_data: bill_no = record['单据编号'] if bill_no not in merged_data: merged_data[bill_no] = { '单据编号': bill_no, 'items': [] } merged_data[bill_no]['items'].append({ '物料编码': record['物料编码'], ... '数量': record['数量'] }) # 写入目标系统 for bill_no, bill_data in merged_data.items(): # 假设有一个函数write_to_target_system用于写入目标系统 write_to_target_system(bill_data) ``` 通过上述步骤,我们实现了从金蝶云星空获取数据、清洗、转换并写入目标系统的全过程。这一过程不仅提高了数据处理的效率,也确保了数据的一致性和准确性。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通WMSAPI接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台旺店通WMSAPI接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现过程和细节。 #### 1. API接口配置 首先,我们需要配置旺店通WMSAPI接口的相关信息。根据元数据配置,我们使用的是`WDT_WMS_ENTRYORDER_CREATE` API,采用POST请求方式。 ```json { "api": "WDT_WMS_ENTRYORDER_CREATE", "method": "POST", "idCheck": true } ``` #### 2. 数据操作与字段映射 在数据操作部分,我们需要将源数据中的字段映射到目标API所需的字段。这里采用了merge操作,将源数据中的`FBillNo`字段合并到目标数据的`details`中,并定义了header和body部分。 ```json { "method": "merge", "field": "FBillNo", "bodyName": "details", "header": ["FBillNo", "FStockID_FNumber"], "body": ["FMaterialID_FNumber", "FEntity_FEntryID", "FQty", "FLOT_FNumber", "FProduceDate", "FEXPIRYDATE"] } ``` #### 3. 请求体结构 根据元数据配置,我们需要构建一个复杂的JSON请求体,包括入库单信息和单据信息两个主要部分。 ##### 入库单信息 入库单信息部分包含了入库单号、仓库编码和业务类型等字段。这些字段直接从源数据中提取并映射到目标API所需的格式。 ```json { "label": "入库单信息", "field": "entryOrder", "type": "object", "children": [ { "parent": "entryOrder", "label": "入库单号", "field": "entryOrderCode", "type": "string", "value": "{FBillNo}" }, { "parent": "entryOrder", "label": "仓库编码", "field": "warehouseCode", "type": "string", "value": "{FStockID_FNumber}" }, { "parent": "entryOrder", { ... ... ... ``` ##### 单据信息 单据信息部分包含了订单行的信息,每一行都需要详细描述,包括商家编码、应收商品数量、库存类型、批次、生产日期和过期日期等。这些字段通过模板语言从源数据中提取并转换为目标API所需格式。 ```json { ... }, { { ... ... ... } ``` #### 4. 数据清洗与转换 在实际操作中,可能会涉及到对某些字段的数据清洗与转换。例如,生产日期和过期日期需要进行格式化处理,这可以通过模板语言中的date函数实现。 ```json { ... }, { { ... ... ... } ``` #### 实际案例:组装入库=>其他入库单-1 假设我们有一个组装入库的数据,需要将其转换为其他入库单并写入旺店通WMS。具体步骤如下: 1. **提取源数据**:从源系统中提取组装入库的数据。 2. **映射字段**:根据元数据配置,将源数据中的字段映射到目标API所需的字段。 3. **构建请求体**:按照上述结构构建JSON请求体。 4. **发送请求**:通过POST方法将请求体发送到旺店通WMSAPI接口。 以下是一个示例请求体: ```json { ... }, { { ... ... ... } ``` 通过以上步骤,我们可以实现从源系统到旺店通WMS的无缝数据集成,确保每个环节的数据都准确无误地传递和处理。这不仅提高了业务效率,也增强了系统间的数据一致性和可靠性。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)