ETL技术在数据集成中的应用:将U8数据写入旺店通

  • 轻易云集成顾问-曾平安

用友U8数据集成到旺店通·企业奇门的技术案例:B111 u8采购入库单(详情)查询 - 拍扁

在现代系统对接过程中,如何实现用友U8与旺店通·企业奇门之间的数据平滑转换和高效同步,是每个技术团队关注的焦点。本次技术案例展示了通过轻易云数据集成平台,成功实现用友U8系统中的采购入库单数据快速、安全地传输至旺店通·企业奇门。这一方案名为“B111 u8采购入库单(详情)查询 - 拍扁”,其核心挑战包括确保数据不漏单、处理接口分页和限流、以及准确无误的格式差异处理。

首先,我们需要从用友U8中抓取采购入库单详细信息。使用/api链接/u8api这个API,我们能够定时可靠地获取所需数据,并且实时监控抓取过程以应对可能出现的问题。在这一步骤中,需要特别注意接口调用频率及分页机制,以避免因超载导致的数据丢失或服务拒绝。此外,还要考虑到如何将这些大量的数据快速写入到目标系统——旺店通·企业奇门。

其次,在处理自主化映射时,我们利用wdt.purchase.order.push API,将提取自用友U8的原始数据显示规则校准后推送给旺店通。此过程中不可忽略的是两者之间的数据格式差异问题,通过定制化映射规则,以及综合错误重试与异常机制,使得每条记录都能被精准转化并安全传输。

最后,对接流程还必须包含全面的监控与日志记录,从而保障整个操作链路透明可追溯。一旦发生预期外错误,可以及时定位原因并触发自动重试逻辑,提高整体可靠性。

本篇文章将深入介绍上述各环节的具体实施方式,带领读者探究一个高效稳定的数据集成解决方案实例。 如何开发金蝶云星空API接口

调用用友U8接口获取并加工数据的技术案例

在轻易云数据集成平台中,调用源系统用友U8接口/apilink/u8api获取并加工数据是生命周期的第一步。本文将深入探讨如何通过配置元数据实现这一过程,并分享具体的技术细节和案例。

配置元数据

首先,我们需要理解并配置元数据,以便正确调用用友U8接口。以下是我们使用的元数据配置:

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

请求参数配置

在请求参数中,我们定义了两个主要的过滤条件,用于指定查询采购入库单的时间范围。这些过滤条件包括开始时间和结束时间,分别使用{{HOURE_AGO_1|datetime}}{{CURRENT_TIME|datetime}}来动态生成查询时间。

{
  ...
  {
    field: 'data',
    label: 'body参数',
    type: 'object',
    children: [
      {
        field: '过滤条件_1',
        label: '过滤条件_1',
        type: 'object',
        children: [
          { field: '名称', label: '开始时间', type: 'string', value: 'ddate' },
          { field: '比较符号', label: '大于等于', type: 'string', value: '>=' },
          { field: '值', label: '短日期', type: 'datetime', value: '{{HOURE_AGO_1|datetime}}' }
        ]
      },
      {
        field: '过滤条件_2',
        label: '过滤条件_2',
        type: 'object',
        children: [
          { field: '名称', label: '结束时间', type: 'string', value: 'ddate' },
          { field: '比较符号', label:'小于等于', type:'string', value:'<=' },
          { field:'值','label':'短日期','type':'datetime','value':'{{CURRENT_TIME|datetime}}' }
        ]
      }
    ]
  }
}

接口调用与数据处理

在配置好请求参数后,我们通过POST方法调用用友U8接口。以下是一个示例请求体:

{
  data:{
    过滤条件_1:{
      名称:"ddate",
      比较符号:"≥",
      值:"2023-10-01T00:00:00"
    },
    过滤条件_2:{
      名称:"ddate",
      比较符号:"≤",
      值:"2023-10-02T00:00:00"
    },
    apicontext:{
      pagesize:"10",
      pageindex:"1"
    }
  },
  apiurl:"pustorein/list"
}

通过上述请求体,我们可以获取指定时间范围内的采购入库单列表。返回的数据会自动填充到响应中,并根据需求进行拍扁处理。

数据拍扁处理

为了便于后续的数据转换与写入,我们对返回的数据进行拍扁处理。拍扁处理是指将嵌套结构的数据转换为平铺结构,使得每个字段都能独立访问。例如:

{
  id:"12345",
  ddate:"2023-10-01T12:00:00",
  supplierName:"供应商A"
}

通过这种方式,可以更方便地进行后续的数据转换和写入操作。

实践案例

假设我们需要查询最近一小时内的采购入库单,并将结果存储到目标系统中。我们可以按照以下步骤进行操作:

  1. 配置元数据:如上所述,定义请求参数和API接口。
  2. 发送请求:通过POST方法调用用友U8接口,获取采购入库单列表。
  3. 处理响应:对返回的数据进行拍扁处理,确保每个字段都能独立访问。
  4. 存储数据:将处理后的数据写入目标系统,实现无缝对接。

通过以上步骤,我们可以高效地实现不同系统间的数据集成,确保数据的一致性和准确性。 如何对接企业微信API接口

数据集成生命周期的第二步:ETL转换与写入目标平台

在数据集成生命周期中,ETL(Extract, Transform, Load)是至关重要的一环。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。

API接口配置与元数据解析

在本案例中,我们需要将U8采购入库单的数据转换并推送到旺店通·企业奇门API接口。根据提供的元数据配置,API接口为wdt.purchase.order.push,使用POST方法进行数据提交。以下是具体字段及其描述:

  1. 供应商编码(provider_no)

    • 字段类型:string
    • 描述:供应商编号,ERP供应商档案必须存在此编号,否则推送失败。
    • 映射值:{cvencode}
  2. 仓库编号(warehouse_no)

    • 字段类型:string
    • 描述:代表仓库所有属性的唯一编码,用于仓库区分。
    • 固定值:999999
  3. API单号(outer_no)

    • 字段类型:string
    • 描述:API单号保证唯一。
    • 映射值:{ccode}
  4. 收货人(contact)

    • 字段类型:string
    • 描述:收货人姓名。
  5. 采购人(purchase_name)

    • 字段类型:string
    • 描述:采购员。
  6. 备注(remark)

    • 字段类型:string
    • 描述:采购单备注。
    • 映射值:{cmemo}
  7. 多行分录(details_list)

    • 字段类型:array
    • 描述:包含采购单所有货品明细信息的数据节点。
      • 商家编码(spec_no):映射值 {{body.cinvcode}}
      • 采购量(num):映射值 {{body.iquantity}}
      • 采购价格(price):映射值 {{body.ioritaxcost}}

数据转换过程

在进行数据转换时,我们需要确保每个字段都能正确映射到目标平台所需的格式。这包括字符串处理、数值转换和数组结构的调整。

  1. 提取源数据

    {
        "cvencode": "V12345",
        "ccode": "PO20231001",
        "cmemo": "紧急订单",
        "body": [
            {
                "cinvcode": "P001",
                "iquantity": 100,
                "ioritaxcost": 50.00
            },
            {
                "cinvcode": "P002",
                "iquantity": 200,
                "ioritaxcost": 30.00
            }
        ]
    }
  2. 转换为目标格式

    {
        "provider_no": "V12345",
        "warehouse_no": "999999",
        "outer_no": "PO20231001",
        "contact": "",
        "purchase_name": "",
        "remark": "紧急订单",
        "details_list": [
            {
                "spec_no": "P001",
                "num": 100,
                "price": 50.00
            },
            {
                "spec_no": "P002",
                "num": 200,
                "price": 30.00
            }
        ]
    }

数据写入目标平台

完成数据转换后,即可通过POST请求将数据写入目标平台旺店通·企业奇门。以下是一个示例请求:

import requests

url = 'https://api.wangdian.cn/openapi2/wdt.purchase.order.push'
headers = {'Content-Type': 'application/json'}
data = {
    'provider_no': 'V12345',
    'warehouse_no': '999999',
    'outer_no': 'PO20231001',
    'contact': '',
    'purchase_name': '',
    'remark': '紧急订单',
    'details_list': [
        {'spec_no': 'P001', 'num': 100, 'price': 50.00},
        {'spec_no': 'P002', 'num': 200, 'price': 30.00}
    ]
}

response = requests.post(url, headers=headers, json=data)
print(response.json())

通过上述步骤,我们实现了从U8采购入库单到旺店通·企业奇门API接口的数据ETL转换和写入。此过程不仅保证了数据的一致性和准确性,还提升了系统间的数据流动效率。 如何对接钉钉API接口

更多系统对接方案