解析ETL转换过程及对接旺店通·企业奇门API

  • 轻易云集成顾问-何语琴
### 金蝶云星空数据集成到旺店通·企业奇门:盘亏单对接其他出库单 在本案例中,我们将分享如何通过轻易云数据集成平台,将金蝶云星空中的盘亏单数据高效、稳定地对接到旺店通·企业奇门的其他出库单。方案命名为“盘亏单对接其他出库单==>金蝶—旺店通”,以下是具体的技术解析。 首先,需要利用金蝶云星空提供的API接口`executeBillQuery`从系统中抓取需要处理的数据。在这个过程中,要特别注意分页和限流问题,以确保大批量数据能顺利获取。采用定时任务,可靠地抓取金蝶云星空接口数据,同时实时监控抓取过程,确保不漏掉任何一个待处理的盘亏单。 成功获取到原始数据后,下一步是进行必要的数据格式转换。这部分工作尤为重要,因为需要处理金蝶云星空与旺店通·企业奇门之间的数据格式差异。例如,在字段名称、字段类型以及结构化信息上的映射,都需根据业务场景进行精细调整。可以采用定制化的数据映射策略,使得转换后的数据符合目标系统要求,并最终能够被正确解读和使用。 在完成上述准备工作之后,通过调用旺店通·企业奇门的API接口`wdt.stockout.order.push`将转换后的出库单写入目标系统。在这一过程中,为了应对可能出现的网络波动或异常情况,需要设计并实现一套健壮的异常处理与错误重试机制,以保证整个写入过程具有高度可靠性。此外,还要考虑大量并发写入操作的性能优化问题,这样才能在短时间内快速、高效地处理海量交易库存记录。 最后,针对整个流程实现全生命周期管理,包括详细日志记录及实时监控。这不仅有助于及时发现并解决潜在问题,也能提高整个集成方案运营维护效率,使业务运行更加透明可控。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D18.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细介绍如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取盘亏单的数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要根据元数据配置来设置API请求参数。以下是关键参数及其配置: - **API名称**: `executeBillQuery` - **请求方法**: `POST` - **业务对象表单ID**: `STK_StockCountLoss` - **过滤条件**: `FDocumentStatus='C' and FStockId.FNumber='001' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'` - **需查询的字段key集合**: ```json [ "FBillEntry_FEntryID", "FID", "FBillNo", "FDocumentStatus", "FStockOrgId.FNumber", "FDate", "FBillTypeID", "FStockerId.FNumber", "FCreatorId", "FCreateDate", "FModifierId", "FModifyDate", "FApproverId", "FApproveDate", "FNoteHead", "FMaterialId.FNumber", "FUnitID", "FAcctQty", "FCountQty", "FLossQty", "FStockId.FNumber", "FStockStatusId", "FOwnerid.FNumber", "FPrice", "FAmount" ] ``` #### 请求示例 以下是一个完整的请求示例: ```json { "api": "executeBillQuery", "method": "POST", "FormId": "STK_StockCountLoss", "FilterString": { "$and": [ {"field": "FDocumentStatus", "$eq": "'C'"}, {"field": "FStockId.FNumber", "$eq": "'001'"}, {"field": "FApproveDate", "$gte": "{{LAST_SYNC_TIME|dateTime}}"} ] }, "FieldKeys": [ {"field": ["FBillEntry_FEntryID", ... // 其他字段 ]} ], ... } ``` #### 数据处理与清洗 在成功获取数据后,下一步是对数据进行清洗和初步加工。以下是一些常见的数据处理步骤: 1. **字段映射与转换**: - 将金蝶云返回的数据字段映射到目标系统所需的字段。 - 对日期格式、数值精度等进行转换。 2. **数据过滤与校验**: - 根据业务需求过滤掉不必要的数据记录。 - 校验关键字段,如单据编号、物料编码等,确保数据完整性和准确性。 3. **异常处理**: - 捕获并记录API调用过程中的异常,如网络错误、权限不足等。 - 对于返回的数据中存在的异常情况(如缺失关键字段),进行相应的处理或记录日志。 #### 示例代码 以下是一个Python示例代码,用于调用`executeBillQuery`接口并处理返回的数据: ```python import requests import json # API请求参数 url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'STK_StockCountLoss', 'FilterString': 'FDocumentStatus=\'C\' and FStockId.FNumber=\'001\' and FApproveDate>=\'2023-01-01\'', 'FieldKeys': 'FBillEntry_FEntryID,FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID,FStockerId.FNumber,FCreatorId,FCreateDate,FModifierId,FModifyDate,FApproverId,FApproveDate,FNoteHead,FMaterialId.FNumber,FUnitID,FAcctQty,FCountQty,FLossQty,FStockId.FNumber,FStockStatusId,FOwnerid.FNumber,FPrice,FAmount' } # 发起请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗与加工 for record in data: # 示例:将日期字符串转换为日期对象 record['FDate'] = datetime.strptime(record['FDate'], '%Y-%m-%d') # 示例:计算总成本 record['TotalCost'] = float(record['FAcctQty']) * float(record['FPrice']) # 更多处理逻辑... else: print(f"Error: {response.status_code}, {response.text}") ``` 通过上述步骤,我们可以高效地从金蝶云星空获取盘亏单数据,并进行初步加工,为后续的数据转换与写入做好准备。这一过程不仅提升了数据处理效率,也确保了数据质量,为业务决策提供了可靠的数据支持。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:轻易云平台对接旺店通·企业奇门API接口技术案例 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台,将源平台的数据进行ETL转换,并最终写入目标平台——旺店通·企业奇门API接口。 #### API接口配置与元数据解析 在本案例中,我们需要将盘亏单对接到其他出库单,并通过`wdt.stockout.order.push`接口将数据推送至旺店通。以下是该接口的元数据配置: ```json { "api": "wdt.stockout.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "outer_no", "label": "外部单号", "type": "string", "describe": "外部系统的唯一单据编号,避免重复推送数据", "value": "{FBillNo}" }, { "field": "warehouse_no", "label": "仓库编号", "type": "string", "describe": "代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置)", "value": "{FStockId_FNumber}" }, { "field": "remark", "label": "备注", "type": "string", "describe": "其他出库单备注", "value": "盘亏出库" }, { "field": "reason", "label": "", ... ``` #### 数据请求与清洗 首先,我们从源平台提取数据。假设源平台提供的数据如下: ```json { ... // 源数据示例 { FBillNo: 'PKD20231001', FStockId_FNumber: 'WH001', FMaterialId_FNumber: 'MAT001', FLossQty: '100' } } ``` 在这个阶段,我们需要确保提取的数据完整且准确。 #### 数据转换与写入 接下来是关键的ETL转换步骤。我们需要根据元数据配置,将提取到的数据转换为目标格式: 1. **外部单号** (`outer_no`):映射为 `FBillNo` 2. **仓库编号** (`warehouse_no`):映射为 `FStockId_FNumber` 3. **备注** (`remark`):固定值“盘亏出库” 4. **货品列表节点** (`detail_list`): - **商家编码** (`spec_no`):映射为 `FMaterialId_FNumber` - **出库数量** (`num`):映射为 `FLossQty` 经过转换后的数据格式如下: ```json { ... // 转换后的目标格式示例 { outer_no: 'PKD20231001', warehouse_no: 'WH001', remark: '盘亏出库', detail_list: [ { spec_no: 'MAT001', num: '100' } ], is_check: '1' } } ``` #### 推送至目标平台 最后一步是通过HTTP POST请求,将转换后的数据推送至旺店通·企业奇门API接口。代码实现如下: ```python import requests url = 'https://api.wangdiantong.com/wdt.stockout.order.push' headers = {'Content-Type': 'application/json'} data = { ... } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: print("Data pushed successfully") else: print(f"Failed to push data: {response.text}") ``` #### 自动审核 根据元数据配置,我们还需要设置自动审核字段`is_check`为`1`,确保推送的数据能够自动审核并生效。 以上就是使用轻易云数据集成平台进行ETL转换,并将数据写入旺店通·企业奇门API接口的详细技术案例。通过这种方式,可以实现不同系统间的数据无缝对接,提高业务效率和透明度。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)