ETL转换在数据集成生命周期中的应用:对接旺店通API

  • 轻易云集成顾问-李国敏
### 金蝶云星空数据集成到旺店通·旗舰版技术案例分享 在采购订单管理中,准确和高效的数据对接对于提高业务运营的透明度和效率至关重要。本案例将详细讨论如何使用轻易云数据集成平台,将金蝶云星空中的采购订单取消数据(新-取消参数0)无缝集成到旺店通·旗舰版的解决方案。核心关注点包括调用金蝶云星空接口`executeBillQuery`检索订单信息,以及通过旺店通·旗舰版API `purchase.PurchaseOrder.cancelByType`完成取消操作。 首先,我们解决了确保不漏单的问题,通过定时可靠地抓取金蝶云星空接口数据,每隔一定时间段精准获取最新的采购订单状态。在调用`executeBillQuery`过程中,我们利用分页处理机制,有效应对大量订单查询请求,并采用限流策略防止接口过载。 其次,大量数据需要快速写入到旺店通·旗舰版。我们实现了批量集成方案,对从金蝶云星空获取的数据进行预处理,统一转换为符合旺店通要求的数据格式,以便更高效地调用`purchase.PurchaseOrder.cancelByType`接口执行批量取消命令。同时,我们建立了健全的异常处理与错误重试机制,在遭遇网络波动或其他意外情况时自动重试并记录日志,确保每一条指令都被正确执行。 此外,为了解决两套系统间的数据格式差异问题,我们配置了自定义映射规则,将金蝶云星空复杂、多样化的数据结构转换为标准化字段,使其能够兼容于旺店通·旗舰版的数据库设计。这不仅提高了一次性传输成功率,也方便后续维护与优化调整。 综上所述,此技术案例展示了完整且高效的系统对接流程,有赖于精准地 API 调用、实时监控及全面日志记录等关键环节,实现了跨系统之间稳定而快速的数据同步。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据并进行初步加工。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来实现这一过程。 #### 接口配置与调用 首先,我们需要配置和调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置中的关键字段: - `api`: "executeBillQuery" - `method`: "POST" - `number`: "FBillNo" - `id`: "FPOOrderEntry_FEntryId" - `name`: "FBillNo" - `idCheck`: true 这些字段定义了我们将要调用的API以及其基本参数和方法。具体请求参数如下: ```json { "FormId": "PUR_PurchaseOrder", "FieldKeys": ["FBillNo", "FPOOrderEntry_FEntryId", "FDate", "FSupplierId.FNumber", ...], "FilterString": "FPurchaseOrgId.FNumber = '100' and FCloseStatus = 'B' and FCloseDate>='{{LAST_SYNC_TIME|datetime}}'", "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}", "TopRowCount": 0 } ``` #### 请求参数详解 1. **FormId**: 表单ID,指定业务对象为采购订单(PUR_PurchaseOrder)。 2. **FieldKeys**: 查询字段集合,包括单据编号(FBillNo)、采购订单条目ID(FPOOrderEntry_FEntryId)、采购日期(FDate)等。 3. **FilterString**: 过滤条件,筛选出采购组织编号为100、关闭状态为B且关闭日期大于上次同步时间的记录。 4. **Limit**: 最大行数,控制每次查询返回的数据量。 5. **StartRow**: 开始行索引,用于分页查询。 6. **TopRowCount**: 返回总行数,用于统计查询结果的总数。 #### 数据请求与清洗 通过上述配置,我们可以发送POST请求到金蝶云星空的API接口以获取原始数据。接下来,我们需要对返回的数据进行清洗和初步加工。这一步主要包括以下操作: 1. **字段映射与转换**:将API返回的数据字段映射到目标系统所需的字段格式。例如,将供应商编号(FSupplierId.FNumber)转换为目标系统中的供应商ID。 2. **数据过滤与校验**:根据业务需求进一步过滤不符合条件的数据,并进行必要的数据校验。例如,确保所有必填字段都有值,且数据格式正确。 3. **异常处理**:对于API调用失败或返回异常数据的情况,需要进行错误处理和日志记录,以便后续排查问题。 #### 示例代码 以下是一个示例代码片段,用于调用API并处理返回的数据: ```python import requests import json # API URL url = 'https://api.kingdee.com/executeBillQuery' # 请求头 headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } # 请求体 payload = { "FormId": "PUR_PurchaseOrder", "FieldKeys": ["FBillNo", "FPOOrderEntry_FEntryId", "FDate", "FSupplierId.FNumber"], "FilterString": "FPurchaseOrgId.FNumber = '100' and FCloseStatus = 'B' and FCloseDate>='2023-01-01'", "Limit": 100, "StartRow": 0, "TopRowCount": 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 = { 'bill_no': record['FBillNo'], 'entry_id': record['FPOOrderEntry_FEntryId'], 'date': record['FDate'], 'supplier_id': record['FSupplierId.FNumber'] } cleaned_data.append(cleaned_record) else: print(f"Error: {response.status_code}, {response.text}") # 输出清洗后的数据 print(cleaned_data) ``` #### 总结 通过上述步骤,我们成功地从金蝶云星空获取了采购订单相关的数据,并进行了初步清洗和加工。这一过程不仅确保了数据的一致性和准确性,还为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体业务需求进一步优化和扩展此流程,以实现更复杂的数据集成任务。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换:将源平台数据转为旺店通·旗舰版API接口格式 在轻易云数据集成平台的生命周期中,ETL(Extract, Transform, Load)转换是一个关键步骤,尤其是当我们需要将已经集成的源平台数据转化为目标平台——如旺店通·旗舰版API接口所能接收的格式时。本文将深入探讨如何利用元数据配置,将采购订单取消请求的数据进行有效转换和写入。 #### 元数据配置解析 我们使用的元数据配置如下: ```json { "api": "purchase.PurchaseOrder.cancelByType", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"operate_type","label":"operate_type","type":"int","describe":"111"}, {"field":"purchase_no_list","label":"purchase_no_list","type":"string","value":"{FBillNo}","parser":{"name":"StringToArray","params":","}}, {"field":"allow_cancel_checked_order","label":"allow_cancel_checked_order","type":"int","value":"1"} ] } ``` #### API接口解析 该配置文件定义了一个调用`purchase.PurchaseOrder.cancelByType` API的请求,具体参数如下: - **operate_type**: 操作类型,固定值111。 - **purchase_no_list**: 采购订单编号列表,从源数据字段`FBillNo`中提取,并通过`StringToArray`解析器按逗号分隔。 - **allow_cancel_checked_order**: 是否允许取消已审核订单,固定值1。 #### 数据转换过程 1. **提取源数据**: 首先,从源平台提取包含采购订单编号的字段`FBillNo`。假设我们获取到的数据格式如下: ```json { "FBillNo": "PO12345,PO12346,PO12347" } ``` 2. **字段解析与转换**: - `operate_type`: 固定值111,不需要额外处理。 - `purchase_no_list`: 使用`StringToArray`解析器,将字符串“PO12345,PO12346,PO12347”按逗号分隔,转化为数组形式: ```json ["PO12345", "PO12346", "PO12347"] ``` - `allow_cancel_checked_order`: 固定值1,不需要额外处理。 3. **构建请求体**: 根据上述解析和转换结果,构建最终的API请求体: ```json { "operate_type": 111, "purchase_no_list": ["PO12345", "PO12346", "PO12347"], "allow_cancel_checked_order": 1 } ``` #### 数据写入目标平台 在完成数据转换后,通过POST方法将构建好的请求体发送到旺店通·旗舰版的API接口。具体实现步骤如下: 1. **设置HTTP请求头**: 确保设置正确的Content-Type(通常为application/json)和必要的认证信息。 2. **发送HTTP请求**: 使用HTTP客户端(如curl、Postman或编程语言内置库)发送POST请求: ```http POST /api/purchase.PurchaseOrder.cancelByType HTTP/1.1 Host: api.wangdian.cn Content-Type: application/json Authorization: Bearer <token> { "operate_type": 111, "purchase_no_list": ["PO12345", "PO12346", "PO12347"], "allow_cancel_checked_order": 1 } ``` 3. **处理响应**: 接收并处理目标平台返回的响应,根据响应状态码和内容判断操作是否成功,并进行相应的错误处理或日志记录。 通过以上步骤,我们成功地将源平台的数据经过ETL转换后写入到了目标平台——旺店通·旗舰版。这不仅实现了不同系统间的数据无缝对接,还确保了业务流程的高效运作。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)