ETL转换与数据写入旺店通企业奇门API的最佳实践

  • 轻易云集成顾问-姚缘

用友U8数据集成到旺店通·企业奇门:K 111 u8其他出库(所有类型)=> 其他出库

在处理系统对接项目时,如何确保业务数据无缝、高效地传递至关重要。本文将分享一个典型案例,即用友U8的“其他出库”数据集成到旺店通·企业奇门,实现订单信息的可靠、快速流转。

数据获取和接口调用

首先,通过用友U8提供的API /apilink/u8api 获取“其他出库”相关的数据。此环节需注意以下几点:

  1. 定时抓取:利用轻易云平台内置调度功能,设定定期抓取计划,确保及时更新,不漏单。
  2. 分页与限流:针对大批量数据分页处理,每页请求数量控制在安全阈值内,以防止服务器过载。

例如,我们可以使用如下查询参数配置实现分页:

{
    "pageIndex": 1,
    "pageSize": 100,
    ...
}

通过循环迭代方式获取全部所需数据,并记录当前处理进度,方便异常恢复。

数据格式转换及映射

从用友U8提取出来的数据格式通常与目标系统(旺店通·企业奇门)的要求存在差异,因此需要进行字段映射和结构调整。在这部分,可以利用轻易云的数据清洗工具,对不同字段进行匹配映射。例如:

  • u8FieldNameA 对应 wdtFieldNameA
  • u8FieldNameB 对应 wdtFieldNameB

上述过程可以通过编写自定义转换规则完成,如:

{
    "source_field": "u8FieldNameA",
    "target_field": "wdtFieldNameA"
}

批量写入及错误处理机制

当完成数据准备后,将其批量推送到旺店通·企业奇门提供的API: wdt.vip.wms.stockinout.order.push。这里重点关注以下几项技术要点:

  1. 高并发写入:设置合理并发级别,加快大量数据快速导入速度。
  2. 错误重试:对于失败的请求,可设计重试机制,例如三次重试策略,有效减少因网络波动导致的数据丢失问题。

同时,需要严格监控每一条记录状态,一旦发生异常立即触发告警,并保存详细日志便于后续追溯分析。这些日志包括成功推送数目、失败原因等,为维护人员提供准确的信息源以提高运维效率。

通过这些细节优化,实现了在保证实时性基础上的高效 用友与SCM系统接口开发配置

用友U8接口调用与数据加工技术案例

在数据集成过程中,调用源系统接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用用友U8接口 /apilink/u8api 获取并加工数据,以实现其他出库的集成方案。

接口调用配置

首先,我们需要配置元数据以便正确调用用友U8的API。以下是具体的元数据配置:

{
  "api": "/apilink/u8api",
  "effect": "QUERY",
  "method": "POST",
  "number": "cbuscode",
  "id": "ccode",
  "name": "id",
  "idCheck": true,
  "request": [
    {
      "field": "data",
      "label": "消息体参数",
      "type": "object",
      "children": [
        {
          "field": "过滤条件_1",
          "label": "开始时间",
          "type": "object",
          "children": [
            {
              "field": "名称",
              "label": "字段",
              "type": "string",
              "value": "dnverifytime"
            },
            {
              "field": "比较符号",
              "label": "大于等于",
              "type": "string",
              "value": ">="
            },
            {
              "field": "值",
              "label": "短日期",
              "type": "string",
              "value": "{{LAST_SYNC_TIME|datetime}}"
            }
          ]
        },
        {
          ...
        }
      ]
    }
  ],
  ...
}

请求参数解析

在请求参数中,我们定义了多个过滤条件和分页参数:

  1. 过滤条件_1:用于指定开始时间,字段为 dnverifytime,比较符号为 >=,值为上次同步时间 {{LAST_SYNC_TIME|datetime}}
  2. 过滤条件_2:用于指定仓库,字段为 cwhcode,比较符号为 in,值为仓库编号 601,702,802,803
  3. 分页参数:包括分页大小 pagesize 和页码 pageindex,分别设置为100和1。

这些参数确保我们能够获取到符合条件的数据,并且支持分页处理以应对大数据量的情况。

数据请求与清洗

在发送请求后,我们会收到用友U8返回的数据。此时需要对数据进行清洗和初步加工,以便后续的数据转换与写入。以下是一个简单的数据清洗示例:

def clean_data(raw_data):
    cleaned_data = []
    for record in raw_data:
        cleaned_record = {
            'id': record['ccode'],
            'bus_code': record['cbuscode'],
            'warehouse_code': record['cwhcode'],
            'verify_time': record['dnverifytime']
        }
        cleaned_data.append(cleaned_record)
    return cleaned_data

这个函数将原始数据中的关键字段提取出来,并重新组织成我们需要的格式。

数据转换与写入

经过清洗后的数据,需要进行进一步的转换并写入目标系统。在轻易云平台中,这一步可以通过配置相应的转换规则和目标系统接口来实现。例如:

{
  ...
  // 转换规则配置
  ...
}

具体的转换规则会根据目标系统的要求进行调整,例如字段映射、数据格式转换等。

实时监控与日志记录

在整个过程中,轻易云平台提供了实时监控和日志记录功能,可以帮助我们及时发现并解决问题。例如,通过监控界面查看每个步骤的数据流动情况,以及通过日志记录分析错误原因。

总结

通过上述步骤,我们成功地调用了用友U8接口 /apilink/u8api 获取并加工了其他出库的数据。这一过程不仅包括了详细的元数据配置,还涉及了数据请求、清洗、转换与写入等多个环节。轻易云平台提供的全生命周期管理和可视化操作界面,使得这一过程更加高效透明。 数据集成平台可视化配置API接口

使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口

在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台所能够接收的格式。本文将重点介绍如何通过轻易云数据集成平台,将源平台的出库数据转换为旺店通·企业奇门API接口所需的格式,并最终写入目标平台。

接口配置与元数据解析

在进行ETL转换时,首先需要配置好目标API接口的元数据。以下是旺店通·企业奇门API接口 wdt.vip.wms.stockinout.order.push 的元数据配置:

{
  "api": "wdt.vip.wms.stockinout.order.push",
  "effect": "EXECUTE",
  "method": "POST",
  "number": "api_outer_no",
  "id": "api_outer_no",
  "name": "api_outer_no",
  "idCheck": true,
  "request": [
    {
      "field": "api_outer_no",
      "label": "接口外部单号",
      "type": "string",
      "describe": "调用本接口时推送的唯一单据编号,避免重复推送数据",
      "value": "{id}"
    },
    {
      "field": "warehouse_no",
      "label": "仓库编号",
      ...
    },
    ...
  ],
  ...
}

数据映射与转换

在ETL过程中,关键步骤是将源平台的数据字段映射到目标API接口所需的字段,并进行必要的数据转换。以下是一些主要字段的映射和转换规则:

  1. 接口外部单号 (api_outer_no)

    • 来源字段:{id}
    • 描述:调用本接口时推送的唯一单据编号,避免重复推送数据。
  2. 仓库编号 (warehouse_no)

    • 来源字段:{cwhcode}
    • 描述:代表仓库所有属性的唯一编码,用于仓库区分。
  3. 出入类型 (order_type)

    • 固定值:1(出库)
  4. 联系人 (contact)

    • 来源字段:{chandler}
  5. 备注 (remark)

    • 来源字段:{cmemo}
  6. 货品明细节点 (goods_list)

    • 子节点包括商家编码、入库数量等。
      {
      "field": "goods_list",
      ...
      "children": [
      {
       ...
       {
         "field": "spec_no",
         ...
         "value": "{{body.cinvcode}}"
       },
       {
         ...
         {
           "field": "num",
           ...
           "value": "{{body.iquantity}}"
         }
       }
      }
      ]
      }
  7. 来源单号 (prop1)

    • 来源字段:{cbuscode}
  8. 部门 (prop2)

    • 来源字段:{cdepname}
  9. 出库类别 (prop3)

    • 动态映射,根据 {crdcode} 字段值进行条件判断和转换。
  10. 出库日期 (prop4)

    • 来源字段:{ddate}

实施步骤

  1. 提取(Extract): 从源系统中提取出库相关的数据。例如,从ERP系统中获取所有类型的其他出库单据。

  2. 转换(Transform): 根据上述映射规则,将提取的数据进行格式化和转换,使其符合旺店通·企业奇门API接口要求。例如,将ERP中的仓库编号、联系人等信息映射到相应的API请求参数中。

  3. 加载(Load): 将转换后的数据通过HTTP POST请求发送到旺店通·企业奇门API接口,实现数据写入操作。

示例代码片段

以下是一个简化版的Python代码示例,用于展示如何将源平台的数据通过ETL过程转换并写入目标API:

import requests
import json

# 源数据示例
source_data = {
    'id': '12345',
    'cwhcode': 'WH001',
    'chandler': '张三',
    'cmemo': '备注信息',
    'cbuscode': 'BUS001',
    'cdepname': '销售部',
    'crdcode': '201',
    'ddate': '2023-10-01',
    'body': [
        {'cinvcode': 'SKU001', 'iquantity': 10},
        {'cinvcode': 'SKU002', 'iquantity': 5}
    ]
}

# 映射和转换
transformed_data = {
    'api_outer_no': source_data['id'],
    'warehouse_no': source_data['cwhcode'],
    'order_type': '1',
    'contact': source_data['chandler'],
    'remark': source_data['cmemo'],
    # ...其他字段...
}

# 转换货品明细节点
goods_list = []
for item in source_data['body']:
    goods_list.append({
        'spec_no': item['cinvcode'],
        'num': item['iquantity']
        # ...其他子节点...
    })
transformed_data['goods_list'] = goods_list

# API请求
api_url = "<目标API地址>"
headers = {'Content-Type': 'application/json'}
response = requests.post(api_url, headers=headers, data=json.dumps(transformed_data))

if response.status_code == 200:
    print("Data successfully pushed to target API.")
else:
    print(f"Failed to push data: {response.text}")

通过上述步骤和代码示例,可以实现从源系统提取出库数据,经过ETL过程后,将其成功写入到旺店通·企业奇门API接口。 用友与MES系统接口开发配置

更多系统对接方案