使用轻易云平台进行ETL转换和数据集成:金蝶到旺店通案例解析

  • 轻易云集成顾问-姚缘
### 金蝶退料申请单-旺店通采购退货开单数据集成案例分享 在大型企业的运营过程中,处理高效且无缝的数据集成是一个不可忽视的重要环节。本文将深入探讨如何通过API接口实现金蝶云星空数据与旺店通·企业奇门的顺畅对接,以实现金蝶退料申请单到旺店通采购退货开单的数据集成。 首先,我们需确保从金蝶云星空获取数据时不漏失任何订单信息。为此,我们调用了其提供的`executeBillQuery` API,该接口可按指定条件查询并分页返回相关业务单据。在实际操作中,通过定时任务定期抓取这些数据,有效避免漏单现象。此外,为了应对大量数据请求造成的限流问题,对API响应进行了适当缓存和分批处理,以最大化提高抓取效率。 接着,我们面临的是大规模的数据需要快速、可靠地写入到旺店通·企业奇门系统中。这一步骤通过调用`wdt.purchase.return.push` API来完成,将提前准备好的标准格式JSON文档推送至目标系统。在该过程中,映射规则显得尤为重要,因为不同系统之间的数据格式存在差异。我们针对这些差异设置了自定义转换规则,从而保证数据能够正确匹配和存储。 此外,在整个流程中的实时监控及日志记录功能同样关键。它不仅帮助跟踪每个操作步骤,还能迅速识别和定位异常情况。当出现错误或失败重试机制启动时,日志将详细记录具体原因,有助于维护人员及时进行故障排除。 总体来说,上述方法有效提升了从金蝶云星空到旺店通·企业奇门之间各环节的透明度和效率,实现了一次成功的数据集成方案。从下一部分开始,我们将逐步演示此方案具体实现过程,以及其中用到的一些关键技术细节。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的过程中,调用源系统的API接口是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取退料申请单的数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据,以便正确调用金蝶云星空的`executeBillQuery`接口。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "name": "FBillNo", "idCheck": true, "request": [ {"field":"FEntity_FEntryID","label":"FEntity_FEntryID","type":"string","describe":"FEntity_FEntryID","value":"FEntity_FEntryID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FID","label":"FID","type":"string","describe":"FID","value":"FID"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","describe":"单据状态 \n暂存:Z \n创建:A \n审核中:B\n已审核:C","value":"FDocumentStatus"}, {"field":"FBillTypeID_Fnumber","label":"单据类型","type":"string","describe":"标准退料申请:TLSQDD01 SYS\n资产退回申请单:TLSQDD02 SYS\n委外退料申请单:TLSQDD03 SYS\n现购退料申请:TLSQDD0D04 SYS\nVMI退料由请:TLSQDD05 SYS","value":"FBillTypeID.Fnumber"}, {"field":"FDate","label":"申请日期","type":"string","describe":"申请日期","value":"FDate"}, {"field":"FPURCHASEORGID_Fnumber","label":"采购组织","type":"string","describe":"采购组织","value":"FPURCHASEORGID.Fnumber"}, {"field":"FRMTYPE","label":"退料类型","type":"string","describe":"退料类型\n检验退料:A\n库存退料:B","value":"FRMTYPE"}, {"field":"FAPPORGID_Fnumber","label":"申请组织","type":"string","describe":"","value":""}, // ... (省略部分字段) ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "", "type": "", }, {"field": "", }, // ... (省略部分字段) ], // ... } ``` #### 请求参数解析 在请求参数中,我们需要特别注意以下几个关键字段: - `FormId`: 必须填写金蝶的表单ID,如`PUR_MRAPP`。 - `FieldKeys`: 查询的字段集合,格式为数组。 - `FilterString`: 用于过滤查询结果的条件字符串,例如`FSupplierId.FNumber = 'VEN00010' and FApproveDate>='{{MINUTE_AGO_30|datetime}}' and FMATERIALID.F_POIH_Combo = 1`。 这些参数确保了我们能够准确地获取所需的数据。 #### 数据请求与清洗 通过上述配置,我们可以发送HTTP POST请求到金蝶云星空的API接口。以下是一个示例请求: ```json { "FormId": "PUR_MRAPP", // ... } ``` 在接收到响应后,需要对数据进行初步清洗和加工。例如,可以过滤掉不必要的字段,仅保留业务逻辑需要的数据。以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for entry in raw_data: cleaned_entry = { '单据编号': entry['FBillNo'], '申请日期': entry['FDate'], '供应商': entry['FSUPPLIERID_Fnumber'], '物料编码': entry['FMATERIALID_Fnumber'], '退料数量': entry['FMRQTY'] } cleaned_data.append(cleaned_entry) return cleaned_data ``` #### 数据转换与写入 在完成数据清洗后,可以将数据转换为目标系统所需的格式,并写入到目标系统中。例如,将清洗后的数据转换为旺店通采购退货开单所需的格式,并通过相应API写入到旺店通系统。 ```python def transform_and_write(data): transformed_data = [] for entry in data: transformed_entry = { 'order_no': entry['单据编号'], 'date': entry['申请日期'], 'supplier': entry['供应商'], 'material_code': entry['物料编码'], 'return_qty': entry['退料数量'] } transformed_data.append(transformed_entry) # 假设有一个函数write_to_wdt用于将数据写入旺店通系统 write_to_wdt(transformed_data) ``` 通过以上步骤,我们实现了从金蝶云星空获取退料申请单数据,并将其加工后写入到旺店通系统,实现了两个异构系统之间的数据无缝对接。这一过程不仅提高了业务透明度和效率,还确保了数据的一致性和准确性。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台所能够接收的格式。本文将详细介绍如何使用轻易云数据集成平台,将金蝶退料申请单的数据转换并写入旺店通·企业奇门API接口。 #### 元数据配置解析 根据提供的元数据配置,我们需要将金蝶退料申请单的数据转换为旺店通采购退货开单所需的格式。以下是元数据配置的详细解析: - **API接口**: `wdt.purchase.return.push` - **请求方法**: `POST` - **ID检查**: `true` - **操作方式**: 合并(`merge`) - **字段映射与合并规则**: - 主表字段(header): - `FBillNo` -> 外部单号 (`outer_no`) - `FDate` -> 日期 - `FStockId_Fnumber` -> 出库仓库编号 (`warehouse_no`) - `FNote` -> 备注 - `FSUPPLIERID_Fnumber` -> 供应商编号 (`provider_no`) - `FSrcBillNo` -> 来源单号 - 明细表字段(body): - `FMATERIALID_Fnumber` -> 商家编码 (`spec_no`) - `FPurQty` -> 退货数量 (`num`) - `FTAXPRICE` -> 单价 (`price`) - `FEntryTaxRate` -> 税率 #### 数据请求与清洗 首先,我们从金蝶系统中获取退料申请单的数据,并进行初步清洗和验证。这一步确保了数据的完整性和准确性,为后续的ETL转换奠定基础。 ```json { "FBillNo": "RT20230901", "FDate": "2023-09-01", "FStockId_Fnumber": "WH001", "FNote": "退货原因:质量问题", "FSUPPLIERID_Fnumber": "SUP001", "FSrcBillNo": "PO20230801", "details": [ { "FMATERIALID_Fnumber": "MAT001", "FPurQty": 10, "FTAXPRICE": 100, "FEntryTaxRate": 13 }, { "FMATERIALID_Fnumber": "MAT002", "FPurQty": 5, "FTAXPRICE": 200, "FEntryTaxRate": 13 } ] } ``` #### 数据转换与写入 接下来,我们将清洗后的数据按照元数据配置进行转换,并通过ETL流程写入到旺店通·企业奇门API接口。 1. **主表字段映射**: 将金蝶系统中的主表字段映射到旺店通采购退货开单所需的字段。 ```json { "provider_no": "{FSUPPLIERID_Fnumber}", "outer_no": "{FBillNo}", "warehouse_no": "{FStockId_Fnumber}", // 如果需要引用采购单号,则传递此字段 // "purchase_no": "{FSrcBillNo}", } ``` 2. **明细表字段映射**: 将金蝶系统中的明细表字段映射到旺店通采购退货开单所需的字段。 ```json { "detail_list": [ { "spec_no": "{FMATERIALID_Fnumber}", "num": "{FPurQty}", "price": "{FTAXPRICE}" // 可选字段,如有需要可以添加 // ,"detail_remark":"{备注}" // ,"discount":"{折扣}" } // 可以有多个明细项,按需添加 ] } ``` 3. **组合请求参数**: 将上述主表和明细表的数据组合成最终的请求参数,准备发送给旺店通·企业奇门API接口。 ```json { "return_info": { // 主表信息 "provider_no": "{FSUPPLIERID_Fnumber}", "outer_no": "{FBillNo}", "warehouse_no": "{FStockId_Fnumber}", // 如果需要引用采购单号,则传递此字段 //"purchase_no":"{FSrcBillNo}", // 明细列表信息 detail_list:[ { spec_no:"{FMATERIALID_Fnumber}", num:"{FPurQty}", price:"{FTAXPRICE}" } // 可以有多个明细项,按需添加 ] }, "is_check":"1"// 是否审核,1表示审核通过。 } ``` 4. **发送请求**: 最后,通过HTTP POST方法将组合好的请求参数发送至旺店通·企业奇门API接口,实现数据写入。 ```python import requests url = 'https://api.wangdian.cn/openapi2/wdt.purchase.return.push' headers = {'Content-Type': 'application/json'} data = { # 上述组合好的JSON对象 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data successfully pushed to WangDianTong API") else: print(f"Failed to push data: {response.text}") ``` 通过以上步骤,我们成功地将金蝶退料申请单的数据经过ETL转换后,写入到了旺店通·企业奇门API接口。这不仅实现了不同系统间的数据无缝对接,还保证了数据的一致性和准确性。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)