用友BIP与旺店通企业奇门的高效数据集成与异常处理

  • 轻易云集成顾问-黄宏棵
### 用友BIP数据集成到旺店通·企业奇门案例分享 在这篇文章中,我们将分享一个具体的系统对接案例:如何通过轻易云数据集成平台,将用友BIP采购订单数据高效地集成到旺店通·企业奇门。方案名称为“采购订单=>采购单-v”,我们重点关注API接口调用、数据格式转换及性能优化等技术细节。 #### 案例背景简介 在本案例中,我们所面临的主要挑战包括: 1. 如何确保从用友BIP获取的数据不漏单,并及时写入到旺店通·企业奇门。 2. 处理大量采购订单数据时,如何确保快速、高效且可靠地完成写入操作。 3. 实现定时抓取用友BIP接口的数据,并处理它们之间的数据格式差异。 #### 技术实现 ### 抓取用友BIP接口/yonbip/scm/purchaseorder/list 首先,我们需要定期从用友BIP系统获取最新的采购订单数据。为了避免漏单,需要设计合理的定时任务调度策略。这可以通过轻易云提供的可视化任务调度工具实现。在每次任务执行过程中,通过调用 `/yonbip/scm/purchaseorder/list` 接口,分页获取全量或增量的采购订单列表。在此过程中,还需特别注意限流问题,以防止过频繁请求导致接口服务异常。 ### 批量集成和快速写入至旺店通·企业奇门 对于批量转移与写入操作,采用 `wdt.purchase.order.push` API 则是关键所在。考虑到大批量数据传输可能引发网络延迟和拥堵,可以使用批量请求发送方式,将多条记录合并在一次API调用中提交。此外,为提升效率,在准备提交的数据包前,可以先进行必要的数据预处理,以适应目标系统要求格式。这一过程同样能够借助轻易云的平台组件加以自动化配置,大幅降低开发维护成本。 ### 异常处理与重试机制 由于网络波动或者其他不可控因素会造成部分请求失败,因此设计可靠的错误重试机制尤为重要。当遇到某些特定类型错误(例如网络超时或短暂服务端故障)时,应捕获这些异常并按照预设逻辑重新尝试相关操作。同时需要记录所有失败日志,以便后续排查和恢复操作。这些功能均可借助轻易云内置模块实现,使得整个流程更加稳健与智能化。 继续阅读下一部分,本方案将深入探讨详细配置步骤以及性能调优方法。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 调用用友BIP接口获取并加工采购订单数据 在轻易云数据集成平台中,调用源系统的API接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用用友BIP接口`/yonbip/scm/purchaseorder/list`来获取采购订单数据,并进行必要的数据加工。 #### API接口配置 首先,我们需要配置API接口的请求参数。根据提供的元数据配置,API接口使用POST方法,具体参数如下: ```json { "api": "/yonbip/scm/purchaseorder/list", "method": "POST", "request": [ { "field": "pageIndex", "label": "页码", "type": "string", "describe": "例:1 默认值:1", "value": "1" }, { "field": "pageSize", "label": "每页数", "type": "string", "describe": "例:10 默认值:10", "value": "1000" }, { "field": "isSum", "label": "查询表头", "type": "string", "describe": "例:false 默认值:false" }, { "field": "simpleVOs", "label": "查询条件", "type": "object", ... }, { ... } ] } ``` #### 查询条件与排序字段 在查询条件部分,我们可以根据业务需求设置不同的过滤条件。例如: - `totalQuantity`字段大于等于某个值。 - `auditTime`字段大于等于上次同步时间。 - `org`字段不等于特定组织ID。 这些条件可以通过以下JSON结构进行配置: ```json { ... { "field":"simpleVOs", ... { ... { ... { ... { ... {"field":"totalQuantity","op":"egt","value1":"100"}, {"field":"auditTime","op":"egt","value1":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"org","op":"neq","value1":"1553156871271481351"} } } } ... } } } ``` 排序字段则可以指定为`id`,并按升序排列: ```json { ... { ... { ... {"field":"id","order":"asc"} ... } } } ``` #### 数据格式转换 在获取到原始数据后,需要对其进行格式转换。根据元数据配置,我们需要将原始字段名转换为新的字段名,并确保数据类型一致。例如: - 将`id`转换为`new_id` - 将`purchaseOrders_id`转换为`new_purchaseOrders_id` - 将`headFreeItem.define1`转换为`new_headFreeItem` - 将`vendor`转换为`new_vendor` - 将`warehouse`转换为`new_warehouse` 这些转换规则可以通过以下JSON结构定义: ```json { ... { ... {"old":"id","new":"new_id","format":"string"}, {"old":"purchaseOrders_id","new":"new_purchaseOrders_id","format":"string"}, {"old":"headFreeItem.define1","new":"new_headFreeItem","format":"string"}, {"old":"vendor","new":"new_vendor","format":"string"}, {"old":"warehouse","new":"new_warehouse","format":"string"} } } ``` #### 数据请求与清洗 在完成上述配置后,可以发起API请求并获取响应数据。接下来,对响应数据进行清洗和格式化处理,以确保符合目标系统的要求。这一步骤通常包括以下操作: 1. **解析响应数据**:将JSON格式的响应数据解析为可操作的数据结构。 2. **字段映射**:根据预定义的映射规则,将原始字段名替换为新的字段名。 3. **类型转换**:确保每个字段的数据类型符合目标系统的要求,例如将数字类型转换为字符串类型。 示例代码如下: ```python import requests import json # 定义API请求参数 payload = { 'pageIndex': '1', 'pageSize': '1000', 'isSum': 'false', 'simpleVOs': [ {'field': 'totalQuantity', 'op': 'egt', 'value1': '100'}, {'field': 'auditTime', 'op': 'egt', 'value1': '{{LAST_SYNC_TIME|datetime}}'}, {'field': 'org', 'op': 'neq', 'value1': '1553156871271481351'} ], 'queryOrders': [ {'field': 'id', 'order': 'asc'} ] } # 发起API请求 response = requests.post('https://api.yonyou.com/yonbip/scm/purchaseorder/list', json=payload) data = response.json() # 数据清洗和格式化处理 formatted_data = [] for item in data['data']: formatted_item = { 'new_id': str(item['id']), 'new_purchaseOrders_id': str(item['purchaseOrders_id']), 'new_headFreeItem': str(item['headFreeItem']['define1']), 'new_vendor': str(item['vendor']), 'new_warehouse': str(item['warehouse']) } formatted_data.append(formatted_item) # 输出处理后的数据 print(json.dumps(formatted_data, indent=2)) ``` 通过以上步骤,我们成功地调用了用友BIP接口获取采购订单数据,并进行了必要的数据清洗和格式化处理,为后续的数据集成奠定了基础。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:采购订单ETL转换至旺店通·企业奇门API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台,将采购订单数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。 #### 元数据配置解析 我们需要将采购订单数据转换并推送到旺店通·企业奇门API接口。以下是元数据配置的详细解析: ```json { "api": "wdt.purchase.order.push", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "vendor,warehouse,code,new_headFreeItem,new_memo", "bodyName": "detail_list", "bodySum": ["purchaseOrders_subQty"], "header": ["new_vendor", "new_warehouse", "code", "new_headFreeItem", "memo", "creator", "org_name", "vendor_code"], "body": ["product_cCode", "purchaseOrders_subQty", "oriTaxUnitPrice", "purchaseOrders_natUnitPrice", "listTaxRate", "purchaseOrders_memo"] }, ... } ``` #### 数据请求与清洗 首先,我们从源系统获取原始采购订单数据,并进行初步清洗和验证。确保所有必要字段如供应商编号、仓库编号、API单号等都已正确填充。 #### 数据转换 接下来,我们将原始数据按照目标API的要求进行转换。以下是关键字段的映射和处理逻辑: - **供应商编号** (`provider_no`): 映射为 `{vendor_code}`,需确保ERP系统中存在该编号。 - **仓库编号** (`warehouse_no`): 使用 `_findCollection` 方法从ERP系统中查找对应的仓库编码。 - **API单号** (`outer_no`): 映射为 `{code}`,需保证唯一性。 - **传入ERP采购单号** (`is_use_outer_no`): 固定值 `1`,表示使用外部单号作为系统采购单号。 - **自动审核** (`is_check`): 固定值 `1`,表示自动审核。 - **收货人姓名** (`contact`): 可选字段,根据业务需求填写。 - **采购员** (`purchase_name`): 映射为 `{creator}`。 - **备注** (`remark`): 映射为 `{memo}-{org_name}`。 对于采购明细节点(`details_list`),我们需要处理以下字段: - **商家编码** (`spec_no`): 映射为 `{{detail_list.product_cCode}}`。 - **采购量** (`num`): 映射为 `{{detail_list.purchaseOrders_subQty}}`。 - **采购价格** (`price`): 映射为 `{{detail_list.purchaseOrders_natUnitPrice}}`,按税前单价计算。 - **折扣** (`discount`): 固定值 `1`,表示不打折。 - **税率** (`tax`): 使用 `_function {{detail_list.listTaxRate}}*0.01` 将百分比转化为小数。 - **税后单价** (`tax_price`): 映射为 `{{detail_list.oriTaxUnitPrice}}`,推送时折扣值不生效,由接口计算实际折扣。 - **备注** (`remark`): 映射为 `{{detail_list.purchaseOrders_memo}}`. #### 数据写入 完成数据转换后,通过POST方法将整理好的JSON对象发送到旺店通·企业奇门API接口: ```json { "provider_no": "{vendor_code}", ... "details_list": [ { "spec_no": "{{detail_list.product_cCode}}", ... "remark": "{{detail_list.purchaseOrders_memo}}" } ], ... } ``` 在发送请求之前,确保所有字段都已正确映射并符合目标平台的要求。通过实时监控和日志记录,可以追踪每个请求的状态和结果,以便及时处理可能出现的问题。 以上即是通过轻易云数据集成平台,将采购订单数据ETL转换并推送至旺店通·企业奇门API接口的详细技术案例。通过这种方式,可以实现不同系统间的数据无缝对接,提高业务流程的自动化和效率。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)