使用轻易云平台实现采购订单数据ETL转换和API写入

  • 轻易云集成顾问-胡秀丛
### 用友BIP采购订单与旺店通·企业奇门数据集成案例分享 在企业信息化过程中,跨系统的数据集成往往面临复杂的技术挑战。本文将以“采购订单=>采购单-p”方案为例,详细解析如何将用友BIP平台中的采购订单数据快速、准确地集成到旺店通·企业奇门中。 #### 1. 数据源和目标系统概述 对于此案例,我们主要涉及两个核心系统: - **用友BIP**:一个广泛应用于企业资源规划(ERP)的软件平台,在本案中负责生成和管理采购订单。 - **旺店通·企业奇门**:电商供应链一体化管理解决方案,本篇文章的目的是将用友BIP中的采购订单数据写入到该平台,实现集中和高效的业务处理。 #### 2. API接口概述 为了实现上述目标,我们需要调用以下API接口: - 用友BIP获取数据的API: `/yonbip/scm/purchaseorder/list` - 旺店通·企业奇门写入数据的API: `wdt.purchase.order.push` 这两个API是整个集成流程运作的关键所在,通过它们可以实现两大系统之间的数据交互。 #### 3. 高吞吐量的数据写入能力 在实际操作中,为了确保大量用友BIP上的采购订单能够不漏单且快速被同步到旺店通·企业奇门,需要配置高吞吐量的数据写入机制。这不仅提升了处理时效性,还保障了业务连续性。在进行批量数据转移时,高效的数据传输性能尤为重要,它可以显著减少在配置计划执行过程中的延迟风险。 #### 4. 数据质量监控与异常检测 为了确保每次对接过程中都能及时发现潜在问题,我们引入了全面的数据质量监控机制。无论是在从用友BIP提取数据阶段,还是向旺店通录入阶段,一旦出现任何异常状况,例如分页限流问题或格式差异,自动触发预警并启动相应的错误重试机制。这种闭环控制保证了整体流程不会因个别异常而失误终止。 #### 5. 自定义数据转换逻辑及映射关系 由于不同系统间存在着特定业务需求及结构差异,因此我们设计了一套自定义化的数据转换逻辑。从摘要视图直接拖拽生成可视化映射模型,不仅使开发人员清晰了解各节点流转情况,也极大程度上优化配置效率。同时通过灵活调整映射规则,可以完美适应多变场景下各种样式要求,使得所有采集到的信息都能精准呈现至目标库表 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image) ### 调用用友BIP接口获取并加工采购订单数据 在轻易云数据集成平台中,调用源系统的API接口是数据集成生命周期的第一步。本文将详细探讨如何通过调用用友BIP接口`/yonbip/scm/purchaseorder/list`获取采购订单数据,并对其进行初步加工。 #### 接口调用配置 首先,我们需要配置API请求的元数据。根据提供的元数据配置,我们可以确定以下关键参数: - **API路径**:`/yonbip/scm/purchaseorder/list` - **请求方法**:`POST` - **分页参数**:`pageIndex`(页码)和`pageSize`(每页数量) - **查询条件**:通过`simpleVOs`字段设置 - **排序字段**:通过`queryOrders`字段设置 #### 请求参数设置 在请求参数中,我们需要特别关注分页、查询条件和排序字段的配置。以下是具体的请求参数示例: ```json { "pageIndex": "1", "pageSize": "1000", "isSum": "false", "simpleVOs": { "field1": { "field": "totalQuantity", "op": "egt", "value1": "" }, "field2": { "field": "auditTime", "op": "egt", "value1": "{{LAST_SYNC_TIME|datetime}}" }, "field3": { "field": "org", "op": "eq", "value1": "1553156871271481351" } }, "queryOrders": [ { "field": "id", "order": "asc" } ] } ``` #### 数据格式化与转换 在获取到原始数据后,需要对其进行格式化和转换。根据元数据配置中的`formatResponse`字段,我们需要将原始字段名转换为新的字段名,并确保数据类型一致。例如: - 将原始字段 `id` 转换为 `new_id` - 将 `purchaseOrders_id` 转换为 `new_purchaseOrders_id` - 将 `headFreeItem.define1` 转换为 `new_headFreeItem` 以下是一个简单的数据转换示例: ```json { "id": "12345", "purchaseOrders_id": "67890", "headFreeItem.define1": "", ... } ``` 转换后: ```json { "new_id": "12345", "new_purchaseOrders_id": "", ... } ``` #### 实际操作步骤 1. **构建请求体**:根据上述参数设置,构建POST请求体。 2. **发送请求**:使用HTTP客户端(如Postman或编程语言中的HTTP库)发送POST请求至用友BIP接口。 3. **接收响应**:解析响应数据,检查是否成功返回所需的数据。 4. **格式化响应数据**:按照预定义的格式规则,对响应数据进行字段名转换和类型校验。 5. **存储或进一步处理**:将格式化后的数据存储到目标系统或进行进一步的数据处理。 #### 示例代码 以下是一个使用Python语言调用该API并处理响应数据的示例代码: ```python import requests import json # 构建请求体 payload = { 'pageIndex': '1', 'pageSize': '1000', 'isSum': 'false', 'simpleVOs': { 'field1': {'field': 'totalQuantity', 'op': 'egt', 'value1': ''}, 'field2': {'field': 'auditTime', 'op': 'egt', 'value1': '{{LAST_SYNC_TIME|datetime}}'}, 'field3': {'field': 'org', 'op': 'eq', 'value1': '1553156871271481351'} }, 'queryOrders': [{'field': 'id', 'order': 'asc'}] } # 设置请求头 headers = {'Content-Type': 'application/json'} # 发起POST请求 response = requests.post('https://api.yonyou.com/yonbip/scm/purchaseorder/list', headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 格式化响应数据 formatted_data = [] for item in data['data']: formatted_item = { 'new_id': item.get('id'), 'new_purchaseOrders_id': item.get('purchaseOrders_id'), # 添加其他字段转换逻辑... } formatted_data.append(formatted_item) # 输出或存储格式化后的数据 print(json.dumps(formatted_data, indent=4)) else: print(f"Failed to fetch data: {response.status_code}") ``` 通过上述步骤和代码示例,可以高效地从用友BIP系统中获取采购订单数据,并进行必要的数据加工,为后续的数据集成奠定基础。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台所能接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将采购订单数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。 #### API接口配置与元数据解析 首先,我们需要理解旺店通·企业奇门API接口的配置和元数据。根据提供的元数据配置,目标API接口为`wdt.purchase.order.push`,请求方法为`POST`。该接口要求传入多个字段,包括供应商编号、仓库编号、API单号等。 以下是主要字段及其描述: - `provider_no`: 供应商编号 - `warehouse_no`: 仓库编号 - `outer_no`: API单号 - `is_use_outer_no`: 是否使用外部单号作为系统采购单号 - `is_check`: 是否自动审核 - `contact`: 收货人姓名 - `purchase_name`: 采购员 - `remark`: 备注 - `details_list`: 采购明细节点 #### 数据转换与映射 在进行ETL转换时,我们需要将源平台的数据映射到上述字段中。例如,供应商编号(`provider_no`)需要从源数据中的`vendor_code`字段获取,而仓库编号(`warehouse_no`)则通过查找特定ID获取。 以下是具体的数据映射规则: ```json [ {"field":"provider_no","value":"{vendor_code}"}, {"field":"warehouse_no","value":"_findCollection find code from 4f73f755-1c4f-33e6-b5a1-7e3b8d894800 where id={new_warehouse}"}, {"field":"outer_no","value":"{code}"}, {"field":"is_use_outer_no","value":"1"}, {"field":"is_check","value":"1"}, {"field":"contact","value":""}, {"field":"purchase_name","value":"{creator}"}, {"field":"remark","value":"{memo}"} ] ``` 对于采购明细节点(`details_list`),我们需要进一步解析每个子字段,如下所示: ```json [ {"field":"spec_no","value":"{{detail_list.product_cCode}}"}, {"field":"num","value":"{{detail_list.purchaseOrders_subQty}}"}, {"field":"price","value":"{{detail_list.oriTaxUnitPrice}}"}, {"field":"discount","value":"1"}, {"field":"tax_price","value":"{{detail_list.oriTaxUnitPrice}}"}, {"field":"remark","value":"{{detail_list.purchaseOrders_memo}}"} ] ``` #### 实施ETL转换 在轻易云数据集成平台中,可以通过可视化操作界面配置上述映射规则。以下是具体步骤: 1. **提取数据**:从源平台提取原始采购订单数据。 2. **清洗数据**:确保数据完整性和一致性,例如去除空值或重复项。 3. **转换数据**:根据上述映射规则,将源数据字段转换为目标API接口所需的格式。 4. **加载数据**:调用旺店通·企业奇门API接口,将转换后的数据写入目标平台。 #### 调用API接口 完成ETL转换后,通过HTTP POST请求将处理后的数据发送到目标API接口。以下是一个示例请求体: ```json { "provider_no": "12345", "warehouse_no": "WH001", "outer_no": "PO123456", "is_use_outer_no": "1", "is_check": "1", "contact": "", "purchase_name": "张三", "remark": "这是一个测试采购单", "details_list": [ { "spec_no": "SKU001", "num": "10", "price": "100.00", "discount": "1", "tax_price": "100.00", "remark": "" } ] } ``` 通过以上步骤,我们实现了从源平台到旺店通·企业奇门API接口的数据无缝对接。这不仅提高了业务流程的效率,还确保了数据的一致性和准确性。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)