轻松实现调拨单数据从旺店通到金蝶云的ETL转换

  • 轻易云集成顾问-林峰
### 案例分享:调拨单同步——集成旺店通·企业奇门到金蝶云星空 在本技术案例中,我们将探讨如何实现旺店通·企业奇门的数据无缝集成到金蝶云星空,具体以"调拨单同步"为核心任务。通过灵活运用 wd.stock.transfer.query 和 batchSave API 接口,高效捕捉和传输数据,同时解决数据格式差异、分页限流问题及确保可靠性。 在实施过程中,我们专注于以下关键环节: 首先,通过调用 旺店通·企业奇门的 wdt.stock.transfer.query 接口,定时抓取最新的调拨单数据,并处理其分页与限流问题,保证接口调用过程中的高效率和稳定性。此外,为了避免漏单情况发生,在每次获取新数据后都会进行严格的数据完整性校验。 下一步是批量写入这些抓取的数据至 金蝶云星空 的 batchSave 接口。在这个过程中,需要特别关注两者之间的数据格式差异,并进行必要的转换和映射,以确保提交至金蝶系统的数据能够被正确解析和应用。 为了进一步提高系统对接的健壮性,我们还实现了完善的异常处理与错误重试机制。当出现意外情况导致接收或发送失败时,这些机制可以迅速响应并恢复操作,从而最大程度上减少由于不可控因素引发的数据丢失或重复问题。同时,对整个数据处理流程进行了实时监控与日志记录,实现全透明可视化追踪,有助于及时发现并解决潜在问题。 总之,此案例展示了一套从提取、转换到加载的一站式解决方案,不仅提高了业务操作效率,还确保了高质量、高可靠性的跨平台数据互联,为类似需求提供了一个可借鉴的重要示范。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stock.transfer.query获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台配置元数据,调用旺店通·企业奇门接口`wdt.stock.transfer.query`,并对获取的数据进行初步加工处理。 #### 接口调用配置 首先,我们需要配置调用`wdt.stock.transfer.query`接口的元数据。该接口采用POST请求方式,主要用于查询调拨单信息。以下是具体的元数据配置: ```json { "api": "wdt.stock.transfer.query", "method": "POST", "number": "transfer_no", "id": "transfer_id", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ { "field": "start_time", "label": "开始时间", "type": "datetime", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "结束时间", "type": "datetime", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "from_warehouse_no", "label": "源仓库", "type": "string" }, { "field": "to_warehouse_no", "label": "目标仓库", "type": "string" }, { "field": "status", "label": "调拨单状态", "type": "string" } ], ... } ``` #### 请求参数解析 1. **时间参数**: - `start_time` 和 `end_time` 用于指定查询的时间范围,分别对应上次同步时间和当前时间。这两个参数确保我们只获取到自上次同步以来的新数据。 - 使用模板变量 `{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 动态生成时间值。 2. **仓库参数**: - `from_warehouse_no` 和 `to_warehouse_no` 分别表示源仓库和目标仓库编号,用于过滤特定仓库之间的调拨单。 3. **状态参数**: - `status` 用于指定调拨单的状态,例如“已完成”、“进行中”等,以便根据业务需求筛选不同状态的调拨单。 #### 分页处理 由于可能存在大量数据,我们需要进行分页处理。分页参数包括: - `page_size`: 每页返回的数据条数,默认设置为100。 - `page_no`: 当前页号,从1开始递增。 这些参数确保我们能够逐页获取所有符合条件的数据,而不会遗漏任何一条记录。 ```json { ... ,"otherRequest":[ {"field":"page_size","label":"分页大小","type":"string","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"page_no","label":"页号","type":"string","value":"{PAGINATION_START_PAGE}"} ] } ``` #### 数据清洗与转换 在成功获取到调拨单数据后,需要对其进行初步清洗和转换,以便后续处理和写入目标系统。常见的数据清洗操作包括: 1. **字段映射**:将源系统中的字段名映射为目标系统中的字段名。例如,将`transfer_no`映射为目标系统中的订单编号字段。 2. **格式转换**:将日期、金额等字段转换为目标系统所需的格式。例如,将日期字符串转换为标准的ISO日期格式。 3. **数据过滤**:根据业务规则过滤掉不需要的数据。例如,只保留状态为“已完成”的调拨单。 #### 实时监控与错误处理 在整个过程中,实时监控和错误处理也是不可或缺的一部分。轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。一旦出现错误,可以通过日志和告警机制及时发现并解决问题。 通过上述步骤,我们可以高效地调用旺店通·企业奇门接口获取调拨单数据,并对其进行初步加工,为后续的数据转换与写入做好准备。这不仅提升了业务透明度和效率,也确保了数据集成过程的可靠性和准确性。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现调拨单同步到金蝶云星空的ETL转换 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现细节。 #### API接口配置 根据元数据配置,我们需要调用金蝶云星空的`batchSave`接口,使用POST方法提交数据。该接口要求的数据格式和字段如下: - **FBillNo**: 单据编号,对应源数据中的`transfer_no`。 - **FBillTypeID**: 单据类型,固定值`ZJDB01_SYS`。 - **FBizType**: 业务类型,固定值`NORMAL`。 - **FTransferDirect**: 调拨方向,固定值`GENERAL`。 - **FTransferBizType**: 调拨类型,固定值`InnerOrgTransfer`。 - **FStockOutOrgId**: 调出库存组织,对应固定值`100`。 - **FOwnerOutIdHead**: 调出货主,对应固定值`100`。 - **FStockOrgId**: 调入库存组织,对应固定值`100`。 - **FDate**: 日期,对应源数据中的`created`。 - **FNote**: 备注,对应源数据中的`remark`。 #### 明细信息(FBillEntry) 明细信息是一个数组,每个元素包含以下字段: - **FMaterialId**: 物料编码,对应源数据中的`details_list.goods_no`。 - **FCMKBarCode**: 零售条形码,无需转换,直接从源数据获取。 - **FQty**: 调拨数量,对应源数据中的`details_list.num`。 - **FLot**: 调出批号,对应源数据中的`details_list.batch_no`。 - **FSrcStockId**: 调出仓库,对应源数据中的`from_warehouse_no`。 - **FDestStockId**: 调入仓库,对应源数据中的`to_warehouse_no`。 - **FNoteEntry**: 备注,对应源数据中的 `details_list.remark`. - **FISFREE**: 赠品,无需转换,直接从源数据获取。 #### 其他请求参数 除了上述字段外,还需要配置一些其他请求参数: - **FormId**: 业务对象表单Id,固定值为 `STK_TransferDirect`. - **IsAutoSubmitAndAudit**: 提交并审核,布尔值为 `true`. - **IsVerifyBaseDataField**: 验证基础资料,布尔值为 `true`. - **Operation**: 执行的操作,固定值为 `Save`. #### 数据清洗与转换 在进行ETL转换时,需要特别注意以下几点: 1. 字段映射:确保每个字段都正确映射到目标平台所需的字段。例如,将 `transfer_no` 映射到 `FBillNo`, 将 `created` 映射到 `FDate`. 2. 数据类型:确保每个字段的数据类型符合目标平台的要求。例如,将日期字段格式化为字符串类型,将数值字段保持为字符串格式等。 3. 固定值填充:对于某些字段,如 `FBillTypeID`, `FBizType`, 等,需要填充预定义的固定值。 #### 实际案例 假设我们有以下源平台的数据: ```json { "transfer_no": "TB20231001", "created": "2023-10-01", "remark": "月度调拨", "details_list": [ { "goods_no": "P001", "num": "10", "batch_no": "B001", "from_warehouse_no": "WH001", "to_warehouse_no": "WH002", "remark": "" }, { "goods_no": "P002", "num": "20", "batch_no": "B002", "from_warehouse_no": "WH001", "to_warehouse_no": "WH003", "remark": "" } ] } ``` 经过ETL转换后,应生成如下符合金蝶云星空API接口要求的数据格式: ```json { "FormId": "STK_TransferDirect", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": true, "Operation": { "rowsKey":"array", rows:[ { FBillNo:"TB20231001", FBillTypeID:"ZJDB01_SYS", FBizType:"NORMAL", FTransferDirect:"GENERAL", FTransferBizType:"InnerOrgTransfer", FStockOutOrgId:"100", FOwnerOutIdHead:"100", FStockOrgId:"100", FDate:"2023-10-01", FNote:"月度调拨", FBillEntry:[ { FMaterialId:"P001", FCMKBarCode:null, FQty:"10", FLot:"B001", FSrcStockId:"WH001", FDestStockId:"WH002", FNoteEntry:null, FISFREE:null }, { FMaterialId:"P002", FCMKBarCode:null, FQty:"20", FLot:"B002", FSrcStockId:"WH001", FDestStockId:"WH003", FNoteEntry:null, FISFREE:null } ] } ] } } ``` 通过轻易云的数据集成平台,我们可以轻松实现上述ETL转换过程,并将处理后的数据通过API接口写入金蝶云星空系统。这不仅提高了业务流程的自动化程度,也确保了不同系统之间的数据一致性和准确性。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)