利用轻易云进行OMS退货单到用友U8的ETL转换

  • 轻易云集成顾问-叶威宏
### 案例分享:旺店通·企业奇门数据集成到用友U8 在现代化的企业管理系统中,数据的集成与同步至关重要。本文将分享一个具体案例,如何通过轻易云数据集成平台实现旺店通·企业奇门销售退货单的数据高效、无缝地对接到用友U8系统。方案名称为 `A oms销售退货单 => u8退货单100001`。 #### 数据获取与处理流程 首先,从接口 `wdt.stockin.order.query.refund` 获取旺店通·企业奇门中的销售退货单数据,这是我们整个流程的起点。在此过程中,我们需要特别注意如何处理分页和限流问题,以确保能够全面、准确地抓取所有必要的数据。而在批量获取这些数据后,还要进行定时可靠的调用操作以避免漏单情况发生。 随后,需要对从旺店通获取到的数据进行预处理,解决两者间可能存在的数据格式差异。这是为了保证后续写入用友U8时能顺利匹配其API要求 `/apilink/u8api`。 #### 数据匹配与写入用友U8 要实现大量数据快速且安全地写入到用友U8,对接过程中还需格外小心考虑诸如映射关系、字段对应等细节。特别是在面对定制化需求时,将不同系统间的数据字段精准映射显得尤为关键。此外,通过实时监控与日志记录机制,可以及时发现并处理异常情况,比如网络波动导致的传输失败,并实施错误重试机制来保障每条数据信息都正确录入。 以上介绍了从抓取源头数据,到中间规范化处理,再至最终快速写入目标数据库的一整套流程框架。而以下内容将详细讲述各步骤中的具体技术实施及关键点解析,包括但不限于API调用配置、分页限流策略设计以及异常和错误重试机制等实际操作手法。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockin.order.query.refund获取并加工数据 在数据集成的生命周期中,调用源系统API接口是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`,并对获取的数据进行初步加工处理。 #### 接口概述 接口`wdt.stockin.order.query.refund`用于查询销售退货单的相关信息。该接口采用POST请求方式,支持分页查询,并且可以根据不同的状态、时间范围等条件进行过滤。 #### 元数据配置解析 以下是该接口的元数据配置: ```json { "api": "wdt.stockin.order.query.refund", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockin_id", "name": "order_no", "idCheck": true, "request": [ {"field": "status", "label": "状态", "type": "int", "describe": "入库单状态 10已取消20编辑中30待审核60待结算80已完成(默认查询80已完成单据)"}, {"field": "start_time", "label": "开始时间", "type": "datetime", "describe": "开始时间", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label": "结束时间", "type": "datetime", "describe": "结束时间", "value":"{{CURRENT_TIME|datetime}}"}, {"field": "page_size", "label": "分页大小", "type": "string", "describe":"分页大小","value":"100"}, {"field":"page_no","label":"页号","type":"string","describe":"页号"}, {"field":"shop_nos","label":"店铺编号","type":"string","value":"100001"} ], “autoFillResponse”: true } ``` #### 请求参数详解 1. **status**: 入库单状态,类型为整数。默认查询状态为80(已完成)的单据。 2. **start_time**: 查询的开始时间,类型为日期时间。使用占位符`{{LAST_SYNC_TIME|datetime}}`表示上次同步时间。 3. **end_time**: 查询的结束时间,类型为日期时间。使用占位符`{{CURRENT_TIME|datetime}}`表示当前时间。 4. **page_size**: 分页大小,类型为字符串。默认值为100。 5. **page_no**: 页号,类型为字符串,用于分页查询。 6. **shop_nos**: 店铺编号,类型为字符串。固定值为100001。 #### 数据请求与清洗 在调用API接口时,我们需要构建一个POST请求,并填充上述参数。以下是一个示例请求体: ```json { “status”: 80, “start_time”: “2023-01-01T00:00:00”, “end_time”: “2023-01-31T23:59:59”, “page_size”: “100”, “page_no”: “1”, “shop_nos”: “100001” } ``` 通过轻易云平台,我们可以自动填充这些参数,并发送请求以获取数据。在获取到响应数据后,需要对其进行初步清洗和转换,以便后续处理。 #### 数据转换与写入 响应数据通常包含多个字段,我们需要根据业务需求选择性地提取和转换这些字段。例如,将订单号(order_no)和入库单ID(stockin_id)映射到目标系统中的相应字段。 ```json { “order_no”: “SO123456”, “stockin_id”: “SI789012” } ``` 在轻易云平台中,可以通过配置映射规则,将这些字段自动转换并写入目标系统,如U8退货单。 #### 自动填充响应 元数据配置中的`autoFillResponse`属性设置为true,这意味着平台会自动处理响应数据,并将其填充到预定义的目标结构中。这大大简化了开发工作量,提高了集成效率。 通过上述步骤,我们实现了从旺店通·企业奇门接口获取销售退货单数据,并对其进行初步加工,为后续的数据处理和写入奠定基础。这一过程展示了轻易云平台在数据集成中的强大功能和灵活性。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换:将OMS销售退货单转换为用友U8退货单 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是一个关键步骤。本文将深入探讨如何使用轻易云数据集成平台将OMS销售退货单的数据转换为用友U8API接口所能接收的格式,并最终写入用友U8系统。 #### API接口配置与元数据解析 首先,我们需要了解目标平台用友U8API接口的配置。以下是元数据配置的详细内容: ```json { "api": "/apilink/u8api", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "data", "label": "data参数", "type": "object", "describe": "data参数", "children": [ { "field": "单据头", "label": "单据头", "type": "object", "describe": "单据头", "children": [ {"field": "退货单号", "label": "退货单号", "type": "string", "value": "{order_no}"}, {"field": "销售类型", "label": "销售类型", "type": "string", "describe":"销售类型","value":"国内零售"}, {"field":"客户简称","label":"客户简称","type":"string","describe":"客户简称","value":"{shop_name}","mapping":{"target":"6400020b52113f5a7c4a6184","direction":"positive"}}, {"field":"销售部门","label":"销售部门","type":"string","describe":"销售部门","value":"{shop_name}","mapping":{"target":"64001885eca23f12d4430214","direction":"positive"}}, {"field":"业务员","label":"业务员","type":"string","describe":"业务员"}, {"field":"备注","label":"备注","type":"string","describe":"备注","value":"{remark}"}, {"field":"退货日期","label":"退货日期","type":"string","value":"{check_time}"}, {"field":"制单人","label":"制单人","type":"string","value":"{refund_operator_name}"} ] }, { "field": "单据体", "label": "单据体", "type": "array", "describe" : “单据体”, "value" : “details_list”, "children":[ {"field" : “行”, "label" : “行”, "type" : “object”, "describe" : “行”, "children":[ {"field" : “仓库名称”, "label" : “仓库名称”, "type" : “string”, "describe” : “仓库名称”, "value” : "{warehouse_no}", “mapping”:{“target”:“640163621499f14120278f6f”,“direction”:“reverse”}}, {"field” : “货物编码”, “label” : “货物编码”, "type” : “string”, “describe” : “存货名称”, "value” : "{{details_list.goods_no}}"}, {"field” : “数量”, “label” : “数量”, "type” : “string”, “describe”:“数量”, ”value”: "_function {{details_list.goods_count}} * (-1)"}, {"field” : “含税单价”, ”label”: ”含税单价”, ”type”: ”string”, ”value”:"_function {{details_list.tax_amount}}/{{details_list.goods_count}}" } ] } ] } ] } ], 其他请求:[{ ”字段”: ”apiurl”, ”标签”: ”接口”, ”类型”: ”字符串”, ”描述”: ”创建退货订单”, ”值”: returnorder / create” }, { 字段: 审核, 标签: 审核接口, 类型: 字符串, 值: returnorder / audit” }] } ``` #### 数据转换步骤 1. **提取数据**: 从OMS系统中提取销售退货单数据,这些数据通常以JSON格式存储。假设我们从OMS系统中获得了如下数据: ```json { order_no: 'RT20231001', shop_name: 'ABC Store', remark: '客户要求退货', check_time: '2023-10-01', refund_operator_name: '张三', details_list: [ {goods_no: 'P001', goods_count: 10, tax_amount: 1000, warehouse_no: 'W001'}, {goods_no: 'P002', goods_count: 5, tax_amount: 500, warehouse_no: 'W002'} ] } ``` 2. **数据清洗**: 确保所有必要字段都存在且格式正确。例如,检查`order_no`、`shop_name`、`check_time`等字段是否符合预期格式。 3. **数据转换**: 根据元数据配置,将OMS系统的数据映射到用友U8API所需的格式。以下是转换后的JSON结构: ```json { data: { 单据头: { 退货单号: 'RT20231001', 销售类型: '国内零售', 客户简称: 'ABC Store', 销售部门: 'ABC Store', 业务员: '', 备注: '客户要求退货', 退货日期: '2023-10-01', 制单人: '张三' }, 单据体:[{ 行:{ 仓库名称:'W001', 货物编码:'P001', 数量:-10, 含税单价:(1000/10) } },{ 行:{ 仓库名称:'W002', 货物编码:'P002', 数量:-5, 含税单价:(500/5) } }] }, apiurl:'returnorder/create' } ``` 4. **加载数据**: 使用POST方法将上述JSON结构的数据发送到用友U8API接口,实现数据写入。 ```javascript fetch('/apilink/u8api', { method: 'POST', headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify({ data:{ 单据头:{ ... }, 单据体:[ ... ] }, apiurl:'returnorder/create' }) }).then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); ``` 通过以上步骤,我们实现了从OMS系统到用友U8系统的ETL转换和数据写入。这一过程不仅确保了不同系统间的数据无缝对接,也提高了业务处理的效率和准确性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)