轻易云平台下ETL转换与数据写入旺店通详解

  • 轻易云集成顾问-孙传友
### 用友U8数据集成到旺店通·企业奇门:B111 U8采购入库单(分页) => OMS采购订单案例分享 在系统集成过程中,实现用友U8与旺店通·企业奇门的数据对接是一项挑战,特别是在处理大批量、多页数的采购入库单时。本文将围绕“B111 u8采购入库单(分页) => oms采购订单”的实际运行方案,探讨如何高效、可靠地实现这一数据集成。 首先,通过调用用友U8的API `/apilink/u8api` 获取所需的采购入库单数据,需要特别注意的是该接口的数据分页和限流问题。在具体实施中,我们采用了定时任务来确保每次抓取操作不仅覆盖所有页面,还能避免因频繁调用造成的网络拥堵或接口限制。这一机制通过周期性执行,提高了数据抓取过程中的稳定性和准确性。 为了保证大量数据能够快速写入旺店通·企业奇门,我们使用了其提供的API接口 `wdt.purchase.order.push`。在此过程中,对应的数据格式差异是另一个重要考虑点。通过灵活的数据映射和转换规则配置,可以有效消除两者之间的格式不兼容问题。例如,用友U8可能以XML形式返回数据,而旺店通则更倾向于JSON格式,这需要我们进行相应的解析与转换操作。 值得一提的是,在整个传输和写入流程中,我们实时监控并记录日志,以便及时发现并解决潜在的问题。此外,为防止异常情况下的数据丢失或重复提交,我们设计了一套完善的错误重试机制。当检测到请求失败时,会自动尝试重新发送,从而保证整体过程的健壮性和可靠性。 综上所述,本案例不仅展示了如何巧妙利用各个API实现系统间的数据流动,也为未来类似项目提供了宝贵经验。在后续内容中,将详细介绍具体技术细节及实现步骤。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 用友U8接口调用与数据加工技术案例 在数据集成过程中,调用源系统接口并获取数据是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台调用用友U8接口`/apilink/u8api`,获取采购入库单数据,并进行初步的数据加工。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据,以便正确地调用用友U8的API。以下是关键的元数据配置: ```json { "api": "/apilink/u8api", "effect": "QUERY", "method": "POST", "number": "cvenabbname", "id": "ccode", "name": "poid", "idCheck": true, "request": [ { "field": "data", "label": "消息体参数", "type": "object", "children": [ { "field": "过滤条件_1", "label": "过滤条件_1", "type": "object", "children": [ { "field": "名称", "label": "开始时间", "type": "string", "value": "dnmaketime" }, { "field": "比较符号", "label": "大于等于", "type": "string", "value": ">=" }, { "field": "值", "label": "短日期", "type":"date", “value”: "{{LAST_SYNC_TIME|datetime}}" } ] }, { “field”: “apicontext”, “label”: “分页参数”, “type”: “object”, “children”: [ { “field”: “pagesize”, “label”: “分页大小”, “type”: “int”, “value”: 10 }, { “field”: “pageindex”, “label”: “页码”, “type”: “int”, “value”: 1 } ] }, { ... } ] } ], ... } ``` #### 请求参数详解 在上述配置中,`data`字段包含了多个子对象,每个子对象代表一个过滤条件或分页参数。以下是几个关键过滤条件的详细说明: 1. **过滤条件_1(开始时间)**: - `名称`: `dnmaketime` - `比较符号`: `>=` - `值`: `{{LAST_SYNC_TIME|datetime}}` 此条件用于筛选出从上次同步时间之后创建的记录。 2. **分页参数**: - `pagesize`: 每页返回记录数,设置为10。 - `pageindex`: 当前页码,初始为1。 3. **过滤条件_2(结束时间)**: - `名称`: `dnmaketime` - `比较符号`: `<=` - `值`: `{{CURRENT_TIME|datetime}}` 此条件用于筛选出当前时间之前创建的记录。 4. **其他过滤条件**: - 红蓝标志、仓库编码、排除生产等,这些条件用于进一步细化筛选范围。 #### 调用API并处理响应 配置好请求参数后,通过POST方法调用`/apilink/u8api`接口。以下是一个示例请求体: ```json { ... data: { ... apicontext: { pagesize: 10, pageindex: 1 }, ... //其他过滤条件 ... } } ``` 成功调用后,API将返回符合条件的数据列表。为了确保数据完整性和一致性,我们可以启用自动填充响应功能(autoFillResponse),这将自动处理并格式化返回的数据。 #### 数据加工与清洗 获取到原始数据后,需要对其进行初步加工和清洗,以便后续的数据转换和写入步骤。常见的数据加工操作包括: - **字段映射**:将源系统字段映射到目标系统字段。例如,将用友U8中的`ccode`映射到OMS中的订单编号。 - **数据类型转换**:确保日期、数值等字段类型一致。 - **去重与校验**:移除重复记录,并校验关键字段是否符合业务规则。 通过上述步骤,我们可以高效地从用友U8系统中获取所需数据,并为后续的数据处理做好准备。这不仅提升了数据集成的效率,也确保了业务流程的顺畅运行。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。以下将详细介绍如何利用元数据配置完成这一过程。 #### 数据请求与清洗 首先,我们从源系统(如U8采购入库单)获取原始数据。这些数据通常包含多个字段,如供应商编号、仓库编号、API单号等。为了确保数据的准确性和一致性,我们需要对这些原始数据进行清洗和预处理。这一步骤包括去除无效数据、填补缺失值以及标准化字段格式等。 #### 数据转换与写入 接下来,我们进入关键的ETL转换阶段。根据提供的元数据配置,我们需要将清洗后的数据映射到旺店通·企业奇门API接口所需的格式,并通过API接口将其写入目标平台。 ##### 元数据配置解析 以下是我们需要映射的主要字段及其描述: 1. **供应商编号 (provider_no)**: - 字段类型:string - 描述:ERP供应商档案必须存在此编号,否则推送失败 - 映射值:`{cvencode}` 2. **仓库编号 (warehouse_no)**: - 字段类型:string - 描述:代表仓库所有属性的唯一编码,用于仓库区分 - 映射值:`{cwhcode}` 3. **API单号 (outer_no)**: - 字段类型:string - 描述:保证唯一,长度不能超过20 - 映射值:`{id}` 4. **自动审核 (is_check)**: - 字段类型:string - 固定值:"1" 5. **收货人姓名 (contact)**: - 字段类型:string - 描述:收货人姓名 6. **采购员 (purchase_name)**: - 字段类型:string - 描述:采购员 7. **收货人联系电话 (telno)**: - 字段类型:string - 描述:收货人联系电话 8. **收货地址 (receive_address)**: - 字段类型:string - 描述:收货地址 9. **预计到货时间 (expect_arrive_time)**: - 字段类型:datetime - 描述:时间格式为YYYY-MM-DD HH:MM:SS - 映射值:`{dveridate}` 10. **其他费用 (other_fee)**: - 字段类型:string - 描述:其他费用 11. **邮资 (post_fee)**: - 字段类型:string - 描述:邮资 12. **备注 (remark)**: - 字段类型:string - 描述:采购单备注 - 映射值:`{cmemo}` 13. **入库单号 (prop1)**: - 字段类型:string - 映射值:`{ccode}` 14. **入库时间 (prop2)**: - 字段类型:string - 映射值:`{ddate}` 15. **采购明细节点 (details_list)**: 包含多个子字段,如商家编码(sku)、采购数量、采购价格、税率等。 子字段示例: ```json [ { "field": "spec_no", "label": "商家编码", "type": "string", "describe": "sku", "value": "{{body.cinvcode}}" }, { "field": "num", "label": "采购数量", "type": "string", "value": "{{body.iquantity}}" }, { "field": "price", "label": "采购价格", "type": "string", "value": "{{body.ioricost}}" }, { "field": "tax", "label": "税率", "type": "string", "value": "0.13" } ] ``` ##### 实际操作步骤: 1. **配置请求参数**: ```json { "api":"wdt.purchase.order.push", ... ... ... } ``` 2. **映射字段**: ```json { ... { "field":"provider_no", ... ... ... ... ... }, { ... ... ... ... ... } } ``` 3. **发送POST请求**: ```python import requests url = 'https://api.wangdiantong.com/purchase_order_push' headers = {'Content-Type': 'application/json'} data = { # 填充已映射的数据字段... } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` 通过上述步骤,我们成功地将源平台的数据经过ETL转换后写入了目标平台旺店通·企业奇门。这一过程不仅确保了数据的一致性和准确性,还极大提升了业务流程的效率。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)