金蝶采购单对接旺店通委外单的ETL转换实战

  • 轻易云集成顾问-孙传友
### 【金蝶】采购入库单对接【旺店通】委外入库单_合并 在本文中,我们将详细阐述如何通过轻易云数据集成平台,将金蝶云星空的采购入库单数据高效、无误地对接到旺店通·企业奇门中的委外入库单。案例解决了接口调用、分页处理、数据格式转换以及异常处理等多个技术难题。 #### 一. 金蝶云星空数据获取与处理 首先,通过调用金蝶云星空的`executeBillQuery` API接口,定时抓取最新的采购入库单信息。为了确保不漏单,我们设置了可靠的定时任务机制,每隔固定时间段触发一次API请求,实时监控并记录每次的数据抓取情况。此外,为应对可能存在的大量返回结果,对分页和限流进行了优化配置: ```python params = { "formId": "STK_InStock", "orderFields": [{"fieldName":"FCreateDate","asc":"false"}], "pageSize": 100, ... } response = executeBillQuery(params) ``` 通过上述参数设定,实现了每页100条记录的数据有序获取,并保证系统不会因为瞬间大流量请求而发生性能问题或超时错误。 #### 二. 数据格式转换与批量处理 从金蝶云星空返回的数据通常较为复杂,需要进行一系列清洗与变换才能适配到旺店通·企业奇门所需的格式。这一步骤包括但不限于字段映射、多层级结构展开及必要的数据合并操作。在此过程中,通过脚本使用特定规则实现目标字段的一致性转化: ```python for record in response['data']: transformed_record = { "external_order_no": record["FBillNo"], ... } ``` 完成格式转换后,将这些待写入的数据批量推送给旺店通·企业奇门对应的API `wdt.vip.wms.stockinout.order.push`。以避免频繁请求带来的网络开销和潜在阻塞问题,同时提高整体效率。 #### 三. 异常处理与重试机制 在实际运行过程中,网络抖动或服务端故障不可避免地会引发部分操作失败。因此,对于所有关键步骤均配置了详尽的日志记录和重试策略,一旦发现异常立即响应并自动执行预定义重试逻辑,以确保最终一致性: ```python try: response = wdt_push_data(transformed_records) except Exception as e: log_error(e) retry(wdt_push_data, transformed_records, retries=3) ``` 该方案不仅提升了系统鲁棒性,还提供可追溯的问题排查依据,大 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D10.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工采购入库单数据。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空接口的元数据。根据提供的元数据配置,`executeBillQuery`接口采用POST方法进行数据查询,主要参数包括单据编号(FBillNo)、实体主键(FID)等。 以下是关键的请求参数配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FInStockEntry_FEntryId", "name": "FBillNo", "idCheck": true, "request": [ {"field":"FInStockEntry_FEntryId","label":"id","type":"string","describe":"id","value":"FInStockEntry_FEntryId"}, {"field":"FID","label":"实体主键","type":"string","describe":"实体主键","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","describe":"单据状态\n暂存:Z\n创建:A\n审核中:B\n已审核:C","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"收料组织","type":"string","describe":"收料组织","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"入库日期","type":"string","describe":"入库日期","value":"FDate"}, {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"标准采购入库:RKD01 SYS\n采购入库单:RKD02 SYS\n委外入库单:RKD03 SYS\n分销购销入库单:RKD04 SYS\n资产入库单:RKD05 SYS\n费用入库单:RKD06 SYS\nVMI入库单:RKD07 SYS\n现购入库单:RKD08 SYS\n直运入库单:RKD09 SYS","value":"FBillTypeID.FNumber"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"货主类型\n业务组织:BD_OwnerOrg\n供应商:BD_Customer\n客户:BD_Customer","value":"FOwnerTypeIdHead"}, {"field":...} ], ... } ``` #### 数据请求与清洗 在发送请求之前,我们需要确保请求参数的正确性和完整性。例如,过滤条件`FilterString`可以用于限定查询范围,以提高查询效率和准确性。以下是一个示例过滤条件: ```json { "FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and (FBillTypeID.FNumber='RKD03_SYS' or FBillTypeID.FNumber='CPCGRKD') and fdate>='2023-08-01'" } ``` 这个过滤条件确保只查询自上次同步时间以来的委外入库单和采购入库单,并且日期不早于2023年8月1日。 #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便写入目标系统。清洗过程包括字段映射、格式转换等。例如,将金蝶返回的数据字段映射到旺店通系统所需的字段格式: ```json { "sourceField": "FBillNo", "targetField": "OrderNumber" }, { "sourceField": "FDate", "targetField": "InStockDate" }, ... ``` 通过轻易云平台,可以使用内置的转换工具对数据进行处理,如日期格式转换、数值计算等。 #### 实际案例应用 假设我们需要将金蝶云星空中的采购入库单数据同步到旺店通系统中的委外入库单,我们可以通过以下步骤实现: 1. **配置元数据**: 根据上述元数据配置,设置好请求参数和过滤条件。 2. **发送请求**: 使用轻易云平台发送POST请求至金蝶云星空接口,获取符合条件的数据。 3. **数据清洗与转换**: 对返回的数据进行必要的清洗和转换,确保字段映射正确。 4. **写入目标系统**: 将处理后的数据通过API或其他方式写入旺店通系统。 通过以上步骤,我们可以高效地实现不同系统间的数据无缝对接,提高业务透明度和效率。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将金蝶采购入库单对接至旺店通·企业奇门API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转为目标平台所能接收的格式。本文将详细介绍如何使用轻易云数据集成平台,将金蝶采购入库单的数据转换为旺店通·企业奇门API接口所需的格式,并最终写入目标平台。 #### 元数据配置解析 在本案例中,我们需要将金蝶采购入库单的数据通过ETL过程转换为旺店通·企业奇门API接口`wdt.vip.wms.stockinout.order.push`所接受的格式。以下是元数据配置的详细解析: - **api**: `wdt.vip.wms.stockinout.order.push` - 该字段指定了目标API接口。 - **method**: `POST` - 指定了HTTP请求的方法类型。 - **idCheck**: `true` - 表示在推送数据时需要进行唯一性检查,避免重复推送。 - **groupCalculate** - **headerGroup**: `["FBillNo","FStockId_FNumber"]` - 指定了头部分组依据字段。 - **bodyGroup**: `["FMaterialId_F_UBGN_Text3"]` - 指定了体部分组依据字段。 - **bodyName**: `"details"` - 源数据体部分名称。 - **targetBodyName**: `"goods_list"` - 目标数据体部分名称。 - **bodyMaxLine**: `500` - 每次请求最大行数限制。 - **calculate** - 定义了需要进行计算汇总的字段: - `FRealQty`: `$sum` 表示对数量进行求和操作。 - `FAllAmount`: `$sum` 表示对金额进行求和操作。 #### 请求参数映射 以下是具体的请求参数映射及其描述: 1. **api_outer_no** - 字段描述:接口外部单号 - 类型:string - 值:`{FBillNo}_{FStockId_FNumber}` - 用途:调用本接口时推送的唯一单据编号,避免重复推送数据。 2. **warehouse_no** - 字段描述:仓库编号 - 类型:string - 值:`{FStockId_FNumber}` - 用途:代表仓库所有属性的唯一编码,用于区分仓库。 3. **order_type** - 字段描述:出入类型 - 类型:string - 值:`2`(入库) 4. **logistics_code**, **logistics_fee**, **other_fee**, **province**, **city**, **district**, **address**, **contact**, **mobile**, **telno** - 各字段类型均为string,用于物流信息、费用、地址及联系人信息等。 5. **auto_check** - 字段描述:自动审核 - 类型:string - 值:`1` 6. **goods_list** - 字段描述:入库单货品列表节点 - 类型:array - 子字段: 1. **spec_no** - 字段描述:商家编码 - 类型:string - 值:`{{details.FMaterialId_F_UBGN_Text3}}` 2. **num** - 字段描述:入库数量 - 类型:string - 值:`{{details.FRealQty}}` 3. **position_no**, **batch_no**, **remark** 全部为string类型,用于货位编号、批次编号及备注信息等。 4. **price** - 字段描述:价格 - 类型:string - 值: ```plaintext _function ROUND( {{details.FAllAmount}}/{{details.FRealQty}}, 4 ) ``` 使用函数计算价格,保留四位小数。 7. **stockout_no** - 字段描述:委外出入库单号 - 类型:string - 值:`{FBillNo}` 8. **stockin_info** 全部为string类型,用于委外出入库单列表节点。 #### 实际应用案例 在实际应用中,我们首先从金蝶系统中提取采购入库单的数据,然后根据上述元数据配置进行ETL转换。通过轻易云平台,我们可以实现以下步骤: 1. 提取源数据并进行初步清洗。 2. 根据元数据配置,将源数据字段映射到目标API接口所需的字段。 3. 对需要汇总和计算的字段进行相应处理,如数量和金额求和、价格计算等。 4. 将处理后的数据通过HTTP POST方法推送至旺店通·企业奇门API接口。 这样,通过轻易云平台强大的ETL功能,我们能够高效地完成从金蝶采购入库单到旺店通·企业奇门委外入库单的数据转换和写入,实现不同系统间的数据无缝对接。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)