ETL转换实例:用友BIPAPI数据写入详解

  • 轻易云集成顾问-叶威宏
### 案例分享:旺店通·企业奇门数据集成到用友BIP - 调拨单对接转库-p 在复杂多变的业务环境中,如何实现畅通无阻的数据流动,成为企业信息化管理的重要课题。在本次案例中,我们将详细探讨“调拨单对接转库-p”方案,展示如何通过轻易云平台,实现旺店通·企业奇门与用友BIP之间高效、安全的数据集成。 #### API接口调用:从获取到写入 在该解决方案中,有两个关键API接口贯穿始终。首先是获取数据的`wdt.stock.transfer.query`接口,通过它可以定时、可靠地抓取旺店通·企业奇门中的调拨单数据。而后,这些数据需要即时且精准地写入到用友BIP系统,对应的API为`/yonbip/scm/storetransfer/save`。 #### 面临挑战及技术处理策略 **1. 集成过程不漏单** 确保每一条调拨单记录都能够被成功抓取和传输是重中之重。在实现过程中,我们利用了实时监控与日志记录机制,使得每一个环节都透明可见,并能快速定位问题或异常情况。此外,引入错误重试机制,当某个步骤出现故障时,可以自动进行重新尝试,从而保证整体流程不中断。 **2. 大量数据快速写入** 为了避免大批量数据生成瓶颈,采用分批次处理方式,同时充分考虑到分页和限流的问题。通过优化SQL查询,并结合缓存机制,使得整个写入操作既迅捷又安全。同时,大规模并行处理能力,让海量数据能够在短时间内被顺利导出至用友BIP系统。 **3. 数据格式差异与映射** 不同系统间的数据格式存在较大差异,在此背景下,需要针对性的定制化映射策略。例如,将旺店通·企业奇门中的字段准确映射至用友BIP相对应的字段。另外,对于结构错综复杂的数据,目前采用嵌套循环来逐层解析和校验,以确保最终结果符合目标需求。 这只是概述部分,在实际实施过程中,还有许多细节和调整工作。本篇文章旨在带领大家深入了解这个具体案例中的技术细节,以及克服各种难点的方法论。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/D9.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stock.transfer.query获取并加工数据 在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stock.transfer.query`来获取调拨单数据,并对其进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是针对`wdt.stock.transfer.query`接口的具体配置: ```json { "api": "wdt.stock.transfer.query", "method": "POST", "number": "transfer_no", "id": "transfer_no", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ { "field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "结束时间", "type": "datetime", "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "from_warehouse_no", "label": "源仓库", "type": "string", "describe": "代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)" }, { "field": "to_warehouse_no", "label": "目标仓库", "type": "string", "describe": "代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)" }, { "field": "status", "label": "调拨单状态", "type": "string", "describe":"调拨单状态10已取消 20编辑中 30待审核 40已审核 42出库单待推送 44出库单推送失败 46待出库 50部分出库 60全部出库 62入库单待推送 64入库单推送失败 66待入库 70部分入库 80待结算 90调拨完成 (不传该字段默认返回全部状态的单据)", “value”: “90” } ], “otherRequest”: [ { “field”: “page_size”, “label”: “分页大小”, “type”: “string”, “describe”: “每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里”, “value”: “{PAGINATION_PAGE_SIZE}” }, { “field”: “page_no”, “label”: “页号”, “type”: “string”, “describe”:“不传值默认从0页开始”, ”value“: ”{PAGINATION_START_PAGE}” } ] } ``` #### 参数详解 1. **start_time 和 end_time**:这两个参数用于实现增量数据获取。`start_time`表示上次同步的时间点,而`end_time`表示当前时间点。通过这两个参数,可以确保每次只获取最新变动的数据。 2. **from_warehouse_no 和 to_warehouse_no**:分别表示源仓库和目标仓库的唯一编码,用于区分不同的仓库存储信息。 3. **status**:用于过滤调拨单状态,此处我们只获取状态为“90”(调拨完成)的记录。 4. **pagination**:分页参数,包括每页返回的数据条数和页号。这些参数确保了在处理大量数据时能够分批次高效地进行。 #### 数据请求与清洗 在完成元数据配置后,通过轻易云平台发起API请求,从旺店通系统中拉取调拨单数据。以下是一个示例请求: ```json { "start_time":"2023-09-01T00:00:00Z", "end_time":"2023-09-30T23:59:59Z", "from_warehouse_no":"WH001", "to_warehouse_no":"WH002", "status":"90", "page_size":"100", "page_no":"0" } ``` #### 数据转换与写入 在成功获取到原始数据后,需要对其进行初步清洗和转换,以便后续处理。例如,可以将日期格式统一转换为标准格式,将金额字段统一转换为小数点两位等。 ```python import pandas as pd # 假设已经从API获得了JSON格式的数据 data = [ {"transfer_no":"T001","date":"2023-09-01T12:34:56Z","amount":"1234.56"}, {"transfer_no":"T002","date":"2023-09-02T12:34:56Z","amount":"2345.67"} ] # 转换为DataFrame df = pd.DataFrame(data) # 日期格式转换 df['date'] = pd.to_datetime(df['date']).dt.strftime('%Y-%m-%d %H:%M:%S') # 金额字段转换为浮点数并保留两位小数 df['amount'] = df['amount'].astype(float).round(2) print(df) ``` 通过上述步骤,我们可以确保从源系统中拉取的数据经过清洗和初步处理后,可以无缝地集成到目标系统中。 以上就是通过轻易云平台调用旺店通·企业奇门接口`wdt.stock.transfer.query`并对其进行初步加工的技术案例。希望这些技术细节能帮助您更好地理解和应用该平台进行高效的数据集成。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/S2.png~tplv-syqr462i7n-qeasy.image) ### 数据转换与写入用友BIPAPI接口的技术案例 在轻易云数据集成平台中,完成数据处理生命周期的第二步,即将已经集成的源平台数据进行ETL转换,并转为目标平台用友BIPAPI接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用元数据配置实现这一过程。 #### 接口配置及元数据解析 首先,我们需要理解目标API接口的配置和元数据。用友BIP的API接口路径为`/yonbip/scm/storetransfer/save`,使用POST方法进行数据提交。以下是主要字段及其配置: - **org**: 库存组织code或id,通过查询获得。例如:`_findCollection find org_code from 4f73f755-1c4f-33e6-b5a1-7e3b8d894800 where code={from_warehouse_no}` - **code**: 单据编号,编码规则是手动时必填。例如:`{transfer_no}` - **vouchdate**: 单据日期。例如:`{created}` - **businesstype**: 交易类型code或id。例如:`A11001` - **outWarehouse**: 出库仓库code或id。例如:`{from_warehouse_no}` - **inWarehouse**: 入库仓库code或id。例如:`{to_warehouse_no}` - **memo**: 备注。例如:`{remark}` - **details**: 转库单子表,包括物料信息、数量、单位等详细信息。 #### 数据转换逻辑 1. **字段映射与转换** - 将源平台的数据字段映射到目标API所需的字段上。例如,将源平台的转库单号映射到目标API的`code`字段。 - 对于需要通过查询获取的数据,例如库存组织code,可以使用 `_findCollection` 方法进行查询并填充。 2. **日期格式转换** - 确保日期格式符合目标API要求,例如将源平台日期格式转换为 `YYYY-MM-DD HH:mm:ss` 格式。 3. **子表处理** - 子表中的每一项物料信息需要逐一映射和转换,包括物料编码、规格说明、数量等。 - 使用嵌套结构处理子表数组,例如 `details_list.goods_no` 映射到 `product_cCode`。 #### 实际案例操作 假设我们从源平台获取了以下转库单数据: ```json { "transfer_no": "ZK20210417000002", "created": "2021-04-17T00:00:00", "from_warehouse_no": "02", "to_warehouse_no": "1920126858645760", "remark": "表头备注", "details_list": [ { "goods_no": "CC00101", "spec_no": "CC00101-1", "num": "12", "unit_name": "件" } ] } ``` 根据上述元数据配置,我们需要将这些数据转换为符合用友BIPAPI接口要求的格式: ```json { "org": "_findCollection find org_code from 4f73f755-1c4f-33e6-b5a1-7e3b8d894800 where code=02", "code": "ZK20210417000002", "vouchdate": "2021-04-17 00:00:00", "businesstype": "A11001", "outWarehouse": "02", "inWarehouse": "1920126858645760", "memo": "表头备注", "_status": "Insert", "details": [ { "product_cCode": "{{details_list.goods_no}}", // 实际值为"CC00101" ... // 同理其他子表字段依次映射 } ] } ``` #### 提交与验证 完成上述数据转换后,通过POST方法将JSON数据提交至用友BIPAPI接口路径 `/yonbip/scm/storetransfer/save`。成功提交后,可以通过调用批量审核接口 `/yonbip/scm/storetransfer/batchaudit` 对转库单进行审核,以确保业务流程完整性。 #### 总结 通过详细解析元数据配置和实际操作案例,我们展示了如何在轻易云数据集成平台中实现从源平台到用友BIPAPI接口的数据ETL转换和写入。这一过程不仅提升了系统间的数据流动效率,也确保了业务流程的准确性和可靠性。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)