用友BIP与旺店通企业奇门的高效数据集成与异常处理

  • 轻易云集成顾问-黄宏棵

用友BIP数据集成到旺店通·企业奇门案例分享

在这篇文章中,我们将分享一个具体的系统对接案例:如何通过轻易云数据集成平台,将用友BIP采购订单数据高效地集成到旺店通·企业奇门。方案名称为“采购订单=>采购单-v”,我们重点关注API接口调用、数据格式转换及性能优化等技术细节。

案例背景简介

在本案例中,我们所面临的主要挑战包括:

  1. 如何确保从用友BIP获取的数据不漏单,并及时写入到旺店通·企业奇门。
  2. 处理大量采购订单数据时,如何确保快速、高效且可靠地完成写入操作。
  3. 实现定时抓取用友BIP接口的数据,并处理它们之间的数据格式差异。

技术实现

抓取用友BIP接口/yonbip/scm/purchaseorder/list

首先,我们需要定期从用友BIP系统获取最新的采购订单数据。为了避免漏单,需要设计合理的定时任务调度策略。这可以通过轻易云提供的可视化任务调度工具实现。在每次任务执行过程中,通过调用 /yonbip/scm/purchaseorder/list 接口,分页获取全量或增量的采购订单列表。在此过程中,还需特别注意限流问题,以防止过频繁请求导致接口服务异常。

批量集成和快速写入至旺店通·企业奇门

对于批量转移与写入操作,采用 wdt.purchase.order.push API 则是关键所在。考虑到大批量数据传输可能引发网络延迟和拥堵,可以使用批量请求发送方式,将多条记录合并在一次API调用中提交。此外,为提升效率,在准备提交的数据包前,可以先进行必要的数据预处理,以适应目标系统要求格式。这一过程同样能够借助轻易云的平台组件加以自动化配置,大幅降低开发维护成本。

异常处理与重试机制

由于网络波动或者其他不可控因素会造成部分请求失败,因此设计可靠的错误重试机制尤为重要。当遇到某些特定类型错误(例如网络超时或短暂服务端故障)时,应捕获这些异常并按照预设逻辑重新尝试相关操作。同时需要记录所有失败日志,以便后续排查和恢复操作。这些功能均可借助轻易云内置模块实现,使得整个流程更加稳健与智能化。

继续阅读下一部分,本方案将深入探讨详细配置步骤以及性能调优方法。 钉钉与ERP系统接口开发配置

调用用友BIP接口获取并加工采购订单数据

在轻易云数据集成平台中,调用源系统的API接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用用友BIP接口/yonbip/scm/purchaseorder/list来获取采购订单数据,并进行必要的数据加工。

API接口配置

首先,我们需要配置API接口的请求参数。根据提供的元数据配置,API接口使用POST方法,具体参数如下:

{
  "api": "/yonbip/scm/purchaseorder/list",
  "method": "POST",
  "request": [
    {
      "field": "pageIndex",
      "label": "页码",
      "type": "string",
      "describe": "例:1 默认值:1",
      "value": "1"
    },
    {
      "field": "pageSize",
      "label": "每页数",
      "type": "string",
      "describe": "例:10 默认值:10",
      "value": "1000"
    },
    {
      "field": "isSum",
      "label": "查询表头",
      "type": "string",
      "describe": "例:false 默认值:false"
    },
    {
      "field": "simpleVOs",
      "label": "查询条件",
      "type": "object",
      ...
    },
    {
      ...
    }
  ]
}

查询条件与排序字段

在查询条件部分,我们可以根据业务需求设置不同的过滤条件。例如:

  • totalQuantity字段大于等于某个值。
  • auditTime字段大于等于上次同步时间。
  • org字段不等于特定组织ID。

这些条件可以通过以下JSON结构进行配置:

{
  ...
  {
    "field":"simpleVOs",
    ...
    {
        ...
        {
          ...
          {
            ...
            {
              ...
              {"field":"totalQuantity","op":"egt","value1":"100"},
              {"field":"auditTime","op":"egt","value1":"{{LAST_SYNC_TIME|datetime}}"},
              {"field":"org","op":"neq","value1":"1553156871271481351"}
            }
          }
        }
        ...
    }
  }
}

排序字段则可以指定为id,并按升序排列:

{
  ...
  {
    ...
    {
        ...
        {"field":"id","order":"asc"}
        ...
    }
  }
}

数据格式转换

在获取到原始数据后,需要对其进行格式转换。根据元数据配置,我们需要将原始字段名转换为新的字段名,并确保数据类型一致。例如:

  • id转换为new_id
  • purchaseOrders_id转换为new_purchaseOrders_id
  • headFreeItem.define1转换为new_headFreeItem
  • vendor转换为new_vendor
  • warehouse转换为new_warehouse

这些转换规则可以通过以下JSON结构定义:

{
  ...
  {
    ...
    {"old":"id","new":"new_id","format":"string"},
    {"old":"purchaseOrders_id","new":"new_purchaseOrders_id","format":"string"},
    {"old":"headFreeItem.define1","new":"new_headFreeItem","format":"string"},
    {"old":"vendor","new":"new_vendor","format":"string"},
    {"old":"warehouse","new":"new_warehouse","format":"string"}
  }
}

数据请求与清洗

在完成上述配置后,可以发起API请求并获取响应数据。接下来,对响应数据进行清洗和格式化处理,以确保符合目标系统的要求。这一步骤通常包括以下操作:

  1. 解析响应数据:将JSON格式的响应数据解析为可操作的数据结构。
  2. 字段映射:根据预定义的映射规则,将原始字段名替换为新的字段名。
  3. 类型转换:确保每个字段的数据类型符合目标系统的要求,例如将数字类型转换为字符串类型。

示例代码如下:

import requests
import json

# 定义API请求参数
payload = {
  'pageIndex': '1',
  'pageSize': '1000',
  'isSum': 'false',
  'simpleVOs': [
    {'field': 'totalQuantity', 'op': 'egt', 'value1': '100'},
    {'field': 'auditTime', 'op': 'egt', 'value1': '{{LAST_SYNC_TIME|datetime}}'},
    {'field': 'org', 'op': 'neq', 'value1': '1553156871271481351'}
  ],
  'queryOrders': [
    {'field': 'id', 'order': 'asc'}
  ]
}

# 发起API请求
response = requests.post('https://api.yonyou.com/yonbip/scm/purchaseorder/list', json=payload)
data = response.json()

# 数据清洗和格式化处理
formatted_data = []
for item in data['data']:
  formatted_item = {
    'new_id': str(item['id']),
    'new_purchaseOrders_id': str(item['purchaseOrders_id']),
    'new_headFreeItem': str(item['headFreeItem']['define1']),
    'new_vendor': str(item['vendor']),
    'new_warehouse': str(item['warehouse'])
  }
  formatted_data.append(formatted_item)

# 输出处理后的数据
print(json.dumps(formatted_data, indent=2))

通过以上步骤,我们成功地调用了用友BIP接口获取采购订单数据,并进行了必要的数据清洗和格式化处理,为后续的数据集成奠定了基础。 如何对接用友BIP接口

轻易云数据集成平台:采购订单ETL转换至旺店通·企业奇门API接口

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

元数据配置解析

我们需要将采购订单数据转换并推送到旺店通·企业奇门API接口。以下是元数据配置的详细解析:

{
  "api": "wdt.purchase.order.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", "memo", "creator", "org_name", "vendor_code"],
    "body": ["product_cCode", "purchaseOrders_subQty", "oriTaxUnitPrice", "purchaseOrders_natUnitPrice", "listTaxRate", "purchaseOrders_memo"]
  },
  ...
}

数据请求与清洗

首先,我们从源系统获取原始采购订单数据,并进行初步清洗和验证。确保所有必要字段如供应商编号、仓库编号、API单号等都已正确填充。

数据转换

接下来,我们将原始数据按照目标API的要求进行转换。以下是关键字段的映射和处理逻辑:

  • 供应商编号 (provider_no): 映射为 {vendor_code},需确保ERP系统中存在该编号。
  • 仓库编号 (warehouse_no): 使用 _findCollection 方法从ERP系统中查找对应的仓库编码。
  • API单号 (outer_no): 映射为 {code},需保证唯一性。
  • 传入ERP采购单号 (is_use_outer_no): 固定值 1,表示使用外部单号作为系统采购单号。
  • 自动审核 (is_check): 固定值 1,表示自动审核。
  • 收货人姓名 (contact): 可选字段,根据业务需求填写。
  • 采购员 (purchase_name): 映射为 {creator}
  • 备注 (remark): 映射为 {memo}-{org_name}

对于采购明细节点(details_list),我们需要处理以下字段:

  • 商家编码 (spec_no): 映射为 {{detail_list.product_cCode}}
  • 采购量 (num): 映射为 {{detail_list.purchaseOrders_subQty}}
  • 采购价格 (price): 映射为 {{detail_list.purchaseOrders_natUnitPrice}},按税前单价计算。
  • 折扣 (discount): 固定值 1,表示不打折。
  • 税率 (tax): 使用 _function {{detail_list.listTaxRate}}*0.01 将百分比转化为小数。
  • 税后单价 (tax_price): 映射为 {{detail_list.oriTaxUnitPrice}},推送时折扣值不生效,由接口计算实际折扣。
  • 备注 (remark): 映射为 {{detail_list.purchaseOrders_memo}}.

数据写入

完成数据转换后,通过POST方法将整理好的JSON对象发送到旺店通·企业奇门API接口:

{
  "provider_no": "{vendor_code}",
  ...
  "details_list": [
    {
      "spec_no": "{{detail_list.product_cCode}}",
      ...
      "remark": "{{detail_list.purchaseOrders_memo}}"
    }
  ],
  ...
}

在发送请求之前,确保所有字段都已正确映射并符合目标平台的要求。通过实时监控和日志记录,可以追踪每个请求的状态和结果,以便及时处理可能出现的问题。

以上即是通过轻易云数据集成平台,将采购订单数据ETL转换并推送至旺店通·企业奇门API接口的详细技术案例。通过这种方式,可以实现不同系统间的数据无缝对接,提高业务流程的自动化和效率。 如何对接金蝶云星空API接口

更多系统对接方案