使用轻易云进行ETL转换并写入旺店通WMS的最佳实践

  • 轻易云集成顾问-吕修远
### 金蝶云星空数据集成到旺店通WMS案例解析 在企业的日常运营中,系统对接与数据集成是确保业务流程高效运转的关键环节之一。本文将分享一个实际应用案例——如何通过轻易云平台,将金蝶采购入库单数据无缝地集成到旺店通其他入库单(包括组织间采购和零散入库单据类型)。 项目背景:我们需要定时从金蝶云星空系统抓取采购入库单的数据,并将这些数据快速、准确地写入旺店通WMS。具体技术挑战包括: 1. 确保大批量数据在高吞吐量下也能够及时、可靠地被处理; 2. 设计并实现自定义的数据转换逻辑,以适应两个系统之间的不同业务需求和数据结构; 3. 实现实时监控和告警功能,以便及时发现并处理潜在的问题,确保整个集成过程顺畅运行。 #### 方案概述 **一、接口调用** 首先,我们需要获取金蝶云星空中的采购入库单据。这一步骤通过调用`executeBillQuery` API接口完成,该接口支持分页查询,可以有效解决大量数据传输过程中可能遇到的性能瓶颈问题。在此基础上,我们会重点解释如何合理设置调用频率以及分页参数,以保证不会因为请求过多而遭遇限流或超时。 接下来,针对得到的数据,需要进行一定程度上的清洗与转换。由于金蝶云星空与旺店通WMS的数据格式存在差异,我们使用轻易云提供的可视化工具,对数据流向进行了详细设计。同时,在转换逻辑中加入必要的数据质量监控机制,以提前捕获并处理异常情况。 **二、大批量快速写入** 为了满足业务对即时性及大量数据同步要求,我们将清洗后的数据信息按需打包,通过`WDT_WMS_ENTRYORDER_CREATE` API接口写入旺店通WMS。这个步骤不仅强调API效率,同时也考虑到了异常处理和错误重试机制,使得即便出现网络波动或者临时故障,也能自动重试,并最终保证任务的一致性和完整性。 **三、集中监控与优化** 另一个核心要素是在整个实施过程中引入了集中化的监控管理体系。不仅对每一次API请求进行日志记录,还设置了全面的告警规则来跟踪任务状态以及性能表现。例如,当发现某个阶段耗时过长或失败次数超过设定阈值时,会立即触发告警,从而让运维团队可以迅速响应,实现闭环管理。这种能力极大提升了我们对整体流程透明度及控制力,也为后续 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`,以获取采购入库单数据并进行初步加工。 #### 接口配置与调用 首先,我们需要配置调用金蝶云星空接口的元数据。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FInStockEntry_FEntryId", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_FEntryId"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"收料组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"入库日期","type":"string","value":"FDate"}, {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"FOwnerTypeIdHead"}, {"field":"FOwnerIdHead_FNumber","label":"货主","type":"string","value":"FOwnerIdHead.FNumber"}, {"field":"FDemandOrgId_FNumber","label":"需求组织","type":"string","value":"FDemandOrgId.FNumber"}, {"field":"FPurchaseOrgId_FNumber","label":"采购组织","type":"string","value":"FPurchaseOrgId.FNumber"}, {"field": "FSupplierId_FNumber", "label": "供应商", "type": "string", "value": "FSupplierId.FNumber"} ], "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": int, describe: 金蝶的查询分页参数}, {"field": “FilterString”, “label”: “过滤条件”, “type”: “string”, “describe”: “示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=”, “value”: “FApproveDate>='{{MINUTE_AGO_30|datetime}}' and FStockId.F_JZJ_CheckBox=1 and FBillTypeID.FNumber='RKD02_SYS'”}, {“field”: “FieldKeys”, “label”: “需查询的字段key集合”, “type”: “array”, “describe”: “金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber”, “parser”: {“name”: “ArrayToString”, “params”: ”,”}}, {“field”: “FormId”, “label”: “业务对象表单Id”, “type”: “string”, “describe”: 必须填写金蝶的表单ID如:PUR_PurchaseOrder, value: STK_InStock} ] } ``` #### 数据请求与清洗 在配置好元数据后,我们通过POST方法调用`executeBillQuery`接口,发送请求以获取采购入库单的数据。请求体中包含了我们需要查询的字段和过滤条件,例如: - `FilterString`: 用于筛选特定条件下的数据,如最近30分钟内审核通过且仓库标识为1的入库单。 - `FieldKeys`: 指定需要返回的字段集合,以逗号分隔。 示例请求体如下: ```json { FormId: 'STK_InStock', FieldKeys: 'FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber,FOwnerTypeIdHead,FOwnerIdHead.FNumber,FDemandOrgId.FNumber,FPurchaseOrgId.FNumber,FSupplierId.FNumber', FilterString: 'FApproveDate>='2023-09-01T00:00:00Z' and FStockFlag=1 and FBillTypeID.FNumber='RKD02_SYS', Limit: 500, StartRow: 0 } ``` #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便写入目标系统。在此过程中,可以使用轻易云提供的数据处理工具,对字段进行映射、格式转换等操作。例如,将金蝶云星空中的`FBillNo`映射为旺店通中的`order_no`,或将日期格式从ISO标准转换为目标系统所需格式。 ```json { sourceField: 'FBillNo', targetField: 'order_no' }, { sourceField: 'FDate', targetField: 'entry_date', transformFunction: 'ISOToCustomFormat' } ``` #### 实时监控与日志记录 在整个数据集成过程中,实时监控和日志记录是确保数据准确性和及时处理问题的重要手段。轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态,并记录每一步操作日志,方便追溯和排查问题。 通过上述步骤,我们可以高效地从金蝶云星空获取采购入库单数据,并进行必要的清洗和转换,为后续的数据写入做好准备。这不仅提高了业务透明度,也大大提升了工作效率。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S12.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通WMSAPI接口 在数据集成生命周期的第二步,我们需要将已经从源平台(金蝶采购入库单)获取的数据进行ETL转换,并将其转为目标平台(旺店通WMSAPI接口)所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### 数据请求与清洗 首先,我们需要从金蝶系统中获取采购入库单的数据。这一步通常涉及到通过API或数据库查询来提取原始数据,并进行初步的清洗和整理,以确保数据的准确性和一致性。在此阶段,我们会使用轻易云数据集成平台提供的工具来完成这些操作。 #### 数据转换与写入 在数据清洗完成后,接下来就是关键的ETL转换过程。我们需要将清洗后的数据按照旺店通WMSAPI接口的要求进行格式转换,并最终通过API写入目标系统。 ##### 配置元数据 根据提供的元数据配置,我们可以看到需要将金蝶系统中的字段映射到旺店通WMSAPI接口所需的字段。以下是具体的字段映射关系: - **Header部分** - `FBillNo` -> `entryOrderCode` - `FStockId_FNumber` -> `warehouseCode` - 固定值 `QTRK` -> `orderType` - **Body部分** - `FMaterialId_FNumber` -> `itemCode` - `FRealQty` -> `planQty` - `FInStockEntry_FEntryId` -> `orderLineNo` - 固定值 `ZP` -> `inventoryType` - `FLot` -> `batchCode` - `FProduceDate|date` -> `productDate` - `FExpiryDate|date` -> `expireDate` ##### API请求结构 根据元数据配置,构建API请求体如下: ```json { "entryOrder": { "entryOrderCode": "{FBillNo}", "warehouseCode": "{FStockId_FNumber}", "orderType": "QTRK" }, "orderLines": [ { "itemCode": "{{details.FMaterialId_FNumber}}", "planQty": "{{details.FRealQty}}", "orderLineNo": "{{details.FInStockEntry_FEntryId}}", "inventoryType": "ZP", "batchCode": "{{details.FLot}}", "productDate": "{{details.FProduceDate|date}}", "expireDate": "{{details.FExpiryDate|date}}" } ] } ``` ##### 实现步骤 1. **初始化配置**: 配置轻易云数据集成平台,设置源系统(金蝶)的连接信息,并定义所需的数据提取规则。 2. **数据提取**: 使用轻易云平台提供的数据提取工具,从金蝶系统中获取采购入库单的数据。 3. **数据清洗**: 对提取的数据进行初步清洗,确保其符合目标系统(旺店通WMS)的要求。例如,去除空值、格式化日期等。 4. **ETL转换**: 根据上述字段映射关系,将清洗后的数据转换为目标系统所需的格式。此步骤可以利用轻易云平台提供的ETL工具来实现。 5. **构建API请求**: 按照元数据配置构建API请求体。确保每个字段都正确映射,并且格式符合旺店通WMSAPI接口要求。 6. **发送请求**: 使用POST方法,将构建好的请求体发送到旺店通WMSAPI接口(`WDT_WMS_ENTRYORDER_CREATE`)。 7. **监控与日志记录**: 实时监控API请求的状态,记录成功与失败的日志,以便后续分析和排查问题。 ##### 示例代码 以下是一个简单示例代码片段,用于展示如何使用Python实现上述步骤: ```python import requests import json # 构建请求头 headers = { 'Content-Type': 'application/json' } # 构建请求体 data = { "entryOrder": { "entryOrderCode": "{FBillNo}", "warehouseCode": "{FStockId_FNumber}", "orderType": "QTRK" }, "orderLines": [ { "itemCode": "{details.FMaterialId_FNumber}", "planQty": "{details.FRealQty}", "orderLineNo": "{details.FInStockEntry_FEntryId}", "inventoryType": "ZP", "batchCode": "{details.FLot}", "productDate": "{details.FProduceDate|date}", "expireDate": "{details.FExpiryDate|date}" } ] } # 将字典转为JSON字符串 json_data = json.dumps(data) # 发送POST请求 response = requests.post('https://api.wangdiantong.com/WDT_WMS_ENTRYORDER_CREATE', headers=headers, data=json_data) # 打印响应内容 print(response.text) ``` 通过上述步骤和示例代码,我们可以高效地将金蝶采购入库单的数据转换并写入到旺店通WMS系统中,实现不同系统间的数据无缝对接。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)