技术详解:用友BIP与旺店通数据集成的ETL转换及实战案例

  • 轻易云集成顾问-胡秀丛
### 用友BIP数据集成到旺店通·企业奇门:采购订单(红字) => 采购退料单-v 在进行用友BIP与旺店通·企业奇门系统的对接过程中,我们选择了一个典型案例——将“采购订单(红字)”的数据集成到“采购退料单-v”。此次集成主要涉及从用友BIP接口获取原始数据,并通过高效、安全的方法将其写入到旺店通·企业奇门。 由于该场景下的数据量较大且需保证无遗漏,我们实现了定时可靠的抓取用友BIP接口数据,同时处理分页和限流问题,以确保每一条有效信息都能被及时、准确地获取。具体执行中,调用用友BIP API `/yonbip/scm/purchaseorder/list`,按分批次读取数据,是第一步关键环节。 然而,仅仅是成功抓取并不足以完成整个流程。在大量数据向目标系统—旺店通·企业奇门的快速写入过程中,仍然需要应对多种挑战,如处理两者之间的数据格式差异,对接异常情况以及错误重试机制等。例如,在调用API `wdt.purchase.return.push` 时,通过自定义映射规则,将源系统复杂多样的数据结构转换为目标系统所需格式,成为确保顺利操控的重要步骤。此外,通过实时监控和日志记录,实现透明化管理,也有效提升了运作效率与稳定性。 在以下部分,我们将详细探讨各个技术步骤及解决方案,包括如何保障集成过程中的无缝衔接、抑制潜在风险,以及增进整体业务流畅度,从而使得这一集成方案得以成功落地应用。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用用友BIP接口获取并加工采购订单数据 在轻易云数据集成平台中,调用源系统用友BIP接口`/yonbip/scm/purchaseorder/list`是数据集成生命周期的第一步。本文将详细探讨如何配置和调用该接口,并对返回的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置API请求参数。根据元数据配置,接口使用POST方法,以下是具体的请求参数: - `pageIndex`: 页码,默认值为1。 - `pageSize`: 每页数,默认值为1000。 - `isSum`: 查询表头,默认值为false。 - `simpleVOs`: 查询条件对象,包括多个过滤条件。 - `queryOrders`: 排序字段数组。 示例请求体如下: ```json { "pageIndex": "1", "pageSize": "1000", "isSum": "false", "simpleVOs": { "field1": { "field": "totalQuantity", "op": "elt", "value1": "" }, "field2": { "field": "auditTime", "op": "egt", "value1": "{{LAST_SYNC_TIME|datetime}}" }, "field3": { "field": "org", "op": "neq", "value1": "1553156871271481351" } }, "queryOrders": [ { "field": "id", "order": "asc" } ] } ``` #### 数据格式化与转换 在获取到原始数据后,需要对其进行格式化和转换。根据元数据配置,我们需要将原始字段名转换为新的字段名,并指定格式。以下是具体的字段映射关系: - `id` -> `new_id` - `purchaseOrders_id` -> `new_purchaseOrders_id` - `headFreeItem.define1` -> `new_headFreeItem` - `vendor` -> `new_vendor` - `warehouse` -> `new_warehouse` 例如,假设原始响应数据如下: ```json { "id": 12345, "purchaseOrders_id": 67890, "headFreeItem.define1": "item001", "vendor": {"name":"Vendor A"}, "warehouse":{"location":"Warehouse A"} } ``` 经过格式化处理后的数据应为: ```json { "new_id": "12345", "new_purchaseOrders_id": "67890", "new_headFreeItem": "item001", "new_vendor": {"name":"Vendor A"}, "new_warehouse":{"location":"Warehouse A"} } ``` #### 实现步骤 1. **配置API请求**:在轻易云平台上配置API调用参数,如页码、每页数量、查询条件和排序字段等。 2. **发送请求**:通过POST方法向用友BIP接口发送请求,获取采购订单列表。 3. **接收响应**:接收并解析API响应数据。 4. **数据格式化**:根据元数据配置,对响应中的字段进行重命名和格式转换。 5. **存储或进一步处理**:将格式化后的数据存储到目标系统或进行进一步的数据处理。 #### 注意事项 - 确保查询条件中的时间戳(如`{{LAST_SYNC_TIME|datetime}}`)正确替换,以保证增量同步的准确性。 - 在实际应用中,根据业务需求调整过滤条件和排序字段,以获取所需的数据集。 - 数据格式化过程中,应确保所有必需字段均已正确映射,以避免后续处理中的数据缺失或错误。 通过上述步骤,我们可以高效地从用友BIP系统中获取采购订单数据,并进行必要的加工处理,为后续的数据写入和业务分析打下坚实基础。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将采购订单转换为旺店通·企业奇门API接口的技术案例 在数据集成过程中,将已经集成的源平台数据进行ETL转换,并最终写入目标平台是一个关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将采购订单(红字)转换为采购退料单,并通过旺店通·企业奇门API接口写入目标平台。 #### API接口配置 首先,我们需要配置旺店通·企业奇门的API接口。根据提供的元数据配置,API接口为`wdt.purchase.return.push`,使用POST方法提交请求。以下是主要字段和其对应的配置: - **供应商编号**(`provider_no`):从源数据中的`vendor_code`字段获取。 - **外部单号**(`outer_no`):从源数据中的`code`字段获取。 - **是否审核**(`is_check`):固定值为1,表示自动审核。 - **出库仓库编号**(`warehouse_no`):通过映射从源数据中的`new_warehouse`字段获取。 - **备注**(`remark`):组合了源数据中的`new_memo`和`org_name`字段。 #### 数据转换与写入 在进行数据转换时,我们需要特别注意以下几点: 1. **明细列表节点(detail_list)**:这是请求参数的二级数据节点,包含采购退货单所有货品明细属性信息的数据节点。我们需要将源数据中的明细列表映射到这个节点中。 2. **字段映射**: - `spec_no`: 从源数据中的 `product_cCode` - `num`: 退货数量,需要将源数据中的 `purchaseOrders_subQty` 乘以 -1 - `price`: 从源数据中的 `oriUnitPrice` - `tax`: 税率,需要将源数据中的 `listTaxRate` 乘以 0.01 - `detail_remark`: 从源数据中的 `new_purchaseOrders_memo` 以下是具体的元数据配置示例: ```json { "api": "wdt.purchase.return.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", "new_memo", "org_name", "vendor_code"], "body": ["product_cCode", "purchaseOrders_subQty", "oriUnitPrice", "listTaxRate", "new_purchaseOrders_memo"] }, "request": [ { "field": "provider_no", "label": "供应商编号", "type": "string", "describe": "供应商编号", "value": "{vendor_code}" }, { "field": "outer_no", "label": "外部单号", "type": "string", "describe": "外部单号", "value": "{code}" }, { "field": "is_check", ... ``` #### 数据处理逻辑 在实际操作中,轻易云平台会按照上述配置进行ETL处理: 1. **提取**:从源系统中提取采购订单的数据。 2. **清洗**:对提取的数据进行必要的清洗和校验,例如确保所有必填字段都有值。 3. **转换**:按照元数据配置,将提取的数据字段映射到目标系统所需的格式。例如,将退货数量乘以-1,将税率乘以0.01等。 4. **加载**:通过调用旺店通·企业奇门API接口,将转换后的数据写入目标系统。 #### 实际应用案例 假设我们有一条采购订单,其原始数据如下: ```json { ... // 省略其他不相关字段 ... { ... // 明细列表 detail_list: [ { product_cCode: 'P001', purchaseOrders_subQty: 10, oriUnitPrice: 100, listTaxRate: 13, new_purchaseOrders_memo: '退货原因' } ], vendor_code: 'V001', code: 'PO123456', new_warehouse: 'W001', new_memo: '紧急退货', org_name: '公司A' } } ``` 经过ETL处理后,生成的请求体如下: ```json { ... // 省略其他不相关字段 ... { provider_no: 'V001', outer_no: 'PO123456', is_check: '1', warehouse_no: '_findCollection find omsOutWarehouse from fa193860-6aa8-37a8-b996-a856e9a8a96f where ysOutWarehouse=W001 mappingType=3', remark: '紧急退货-公司A', detail_list: [ { spec_no: 'P001', num: '-10', // 原始数量乘以-1 price: '100', tax: '0.13', // 原始税率乘以0.01 detail_remark: '退货原因' } ] } } ``` 通过上述步骤,我们成功地将采购订单的数据转换为符合旺店通·企业奇门API接口要求的格式,并完成了写入操作。这种标准化和自动化的数据处理流程,大大提高了业务效率和准确性。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)