ETL转换:从用友BIP到旺店通的高效数据写入

  • 轻易云集成顾问-蔡威

用友BIP数据集成到旺店通·企业奇门案例分享: 物料逐个查询对接(九润源)

在本次技术案例中,我们聚焦于如何高效、稳定地实现用友BIP与旺店通·企业奇门之间的数据集成,对应具体的方案名称为“物料逐个查询对接”。此次集成任务主要通过调用用友BIP的API接口/yonbip/digitalModel/product/list获取数据,再利用旺店通·企业奇门提供的API接口 wdt.goods.push 实现批量数据写入。

首先,确保从用友BIP获取的数据准确无误是至关重要的一步。我们采用了定时抓取机制,通过设定合理的时间间隔,从而保证每一次调用都能及时捕捉新增和变更的数据。同时,为处理大规模的数据分页和限流问题,我们开发了一套自动化分页算法,使得每一页请求的数据可以在合理限制内被成功获取,并避免因频繁调用导致的速度瓶颈。

其次,在执行大量数据写入到旺店通·企业奇门时,我们采取了并行处理方式,以提升整体效率。这种方法不仅能够加快数据传输速度,还能有效分担系统压力,防止单点过载。此外,对于不同系统在表字段、数据类型上的差异性,我们设计了一个灵活且可扩展的数据映射层,确保从用友BIP传输来的原始信息能够精确转换为旺店通所需格式,实现无缝对接。

为了增强容错能力和可靠性,本方案引入了异常处理与错误重试机制。当某一步骤发生故障或意外错误时,该机制允许快速定位问题源头并进行自动化恢复操作,最大限度降低人工介入成本。在整个过程中,我们依赖实时监控功能,各环节状态及日志记录清晰透明,有助于快速响应潜在风险,提高业务连续性。

通过上述策略,此次物料逐个查询对接示例,不仅展示出两大平台的强兼容性,也充分体现出以用户需求为导向、灵活应变技术环境的重要意义。在后续内容中,将详细探讨具体配置步骤和代码实现细节,进一步剖析此方案实际应用中的各种挑战与解决方法。 用友与SCM系统接口开发配置

用友BIP接口数据集成与加工技术案例

在数据集成的生命周期中,调用源系统接口获取并加工数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用用友BIP接口/yonbip/digitalModel/product/list,并对返回的数据进行加工处理。

接口调用与请求配置

首先,我们需要配置API接口的请求参数。用友BIP提供了一个POST方法的接口,用于获取物料信息。以下是该接口的元数据配置:

{
  "api": "/yonbip/digitalModel/product/list",
  "method": "POST",
  "number": "code",
  "id": "id",
  "formatResponse": [
    {
      "old": "unit",
      "new": "unit_new",
      "format": "string"
    }
  ],
  "condition": [
    [
      {
        "field": "Materialtype",
        "logic": "eqv2",
        "value": "1"
      }
    ]
  ],
  "request": [
    {
      "field": "pageIndex",
      "label": "当前页索引  ",
      "type": "string",
      "describe": " 默认值:1",
      "value": "1"
    },
    {
      "field": "pageSize",
      "label": "页大小   ",
      "type": "string",
      "describe": "默认值:10",
      "value": "50"
    },
    {
      "field": "code",
      "label": "物料编码",
      "type": ":string"
    },
    {
      "field": ":name",
      ":label:":"物料名称",
      ":type:":"string"
    },
    {
      ":field:":"modelDescription",
      ":label:":"规格说明",
      ":type:":"string"
    },
    {
      ":field:":"manageClass",
      ":label:":"物料分类ID",
      ":type:":"string"
    },
    {
      ":field:":"productClass",
      ":label:":"商品分类ID",
      ":type:":"string"
    },
    {
     :field:"productTemplate,
     :label:"物料模板ID,
     :type:"string
   },
   :{
     field:"model,
     label:"型号,
     type:"string
   },
   :{
     field:"simple,
     label:"扩展查询,
     type:"object,
     children:[
       {
         field:"pubts,
         label:"时间戳,
         type:"string,
         describe:"查询大于所传时间戳的数据    示例:2021-10-22 21:59:40,
         value:"{{LAST_SYNC_TIME|datetime}},
         parent:simple
       }
     ]
   }
 ]
}

在这个配置中,我们定义了请求参数和条件。例如,pageIndexpageSize用于分页控制,默认值分别为1和50。其他字段如codename等用于过滤查询条件。

数据清洗与格式转换

获取到原始数据后,需要对其进行清洗和格式转换。根据元数据配置中的formatResponse字段,我们将返回结果中的unit字段重命名为unit_new,并将其格式化为字符串类型。

"formatResponse":[{"old":"unit","new":"unit_new","format":"string"}]

这一步确保了数据的一致性和可读性,使得后续的数据处理更加简洁明了。

条件过滤

在请求过程中,我们还可以添加条件过滤。例如,以下条件表示只获取物料类型为1的数据:

"condition":[[{"field":"Materialtype","logic":"eqv2","value":"1"}]]

这种条件过滤机制使得我们能够精准地获取所需的数据,避免不必要的数据传输和处理。

请求示例

结合以上配置,一个完整的请求示例如下:

{
  "/yonbip/digitalModel/product/list":{
    method: 'POST',
    headers:{
        'Content-Type': 'application/json'
        },
        body:{
            pageIndex:'1',
            pageSize:'50',
            code:'',
            name:'',
            modelDescription:'',
            manageClass:'',
            productClass:'',
            productTemplate:'',
            model:'',
            simple:{
                pubts:'{{LAST_SYNC_TIME|datetime}}'
                }
             }
          }
}

这个请求将返回符合条件的物料信息,并且每页包含最多50条记录。

数据处理与写入

在获取并清洗完数据后,可以将其转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常涉及到复杂的业务逻辑和数据映射,需要根据具体需求进行定制化开发。

通过以上步骤,我们实现了从用友BIP系统获取物料信息并进行初步加工处理,为后续的数据集成奠定了基础。在整个过程中,轻易云数据集成平台提供了全透明可视化的操作界面,使得每个环节都清晰易懂,并实时监控数据流动和处理状态,大大提升了业务的透明度和效率。 金蝶与SCM系统接口开发配置

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

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和具体操作。

元数据配置解析

首先,我们需要理解元数据配置中的各个字段及其意义。以下是主要字段及其描述:

  • api: wdt.goods.push 表示调用的API接口。
  • method: POST 表示请求方法。
  • idCheck: true 表示需要对ID进行检查。

请求参数主要包括一个名为 goods_list 的数组节点,包含多个货品信息,每个货品信息又包含多个字段,如下所示:

  • 货品节点 (goods_list)
    • goods_no: 货品编号
    • goods_type: 货品类别
    • goods_name: 货品名称
    • class_name: 分类
    • brand_name: 品牌
    • unit_name: 基本单位
    • aux_unit_name: 辅助单位名称
    • remark: 备注
    • 属性 (props1, props2, ...): 包括酒精度、规格、体积等。
    • 单品节点 (spec_list): 包含SKU所有属性信息的数据节点。

数据转换与映射

在ETL转换过程中,需要将源平台的数据映射到上述结构中。以下是一些关键字段的映射规则:

  1. 货品编号 (goods_no)

    "value": "{code}"

    映射源数据中的code字段到目标字段goods_no

  2. 货品名称 (goods_name)

    "value": "{name}"

    映射源数据中的name字段到目标字段goods_name

  3. 分类 (class_name)

    "value": "{manageClass_Name}"

    映射源数据中的manageClass_Name字段到目标字段class_name

  4. 品牌 (brand_name)

    "value": "{brand_Name}"

    映射源数据中的brand_Name字段到目标字段brand_name

  5. 基本单位 (unit_name)

    "value": "{unit_Name}"

    映射源数据中的unit_Name字段到目标字段unit_name

  6. 单品节点 (spec_list)

    • 商家编码 (spec_no)
      "value": "{code}"
    • 规格码 (spec_code)
      "value": "{{productskus.0.model}}"
    • 主条码 (barcode)
      "value": "{{detail.barCode}}"

特殊处理逻辑

在某些情况下,需要对特定字段进行特殊处理。例如,税率(tax_rate) 字段:

"value": "_function ( case '{{detail.outTaxrate_Name}}' when '' then 0 else '{{detail.outTaxrate_Name}}' end ) /100"

这里使用了一个自定义函数 _function() 来处理税率值,将空值转换为0,否则按原值除以100。

实际操作步骤

  1. 提取源平台数据:通过轻易云的数据请求功能,从源平台提取原始数据。
  2. 清洗与预处理:对提取的数据进行清洗和预处理,确保其符合后续转换要求。
  3. 映射与转换:根据上述元数据配置,将清洗后的数据映射并转换为目标格式。
  4. 构建请求:根据转换后的数据,构建符合旺店通·企业奇门API接口要求的请求报文。
  5. 发送请求:通过HTTP POST方法,将构建好的请求报文发送至旺店通·企业奇门API接口。
  6. 监控与日志记录:实时监控请求状态,并记录日志以便后续分析和问题排查。

示例代码片段

以下是一个简化的Python代码示例,用于演示上述过程:

import requests

# 构建请求报文
payload = {
    "api": "wdt.goods.push",
    "method": "POST",
    "goods_list": [
        {
            "goods_no": source_data["code"],
            "goods_type": "1",
            "goods_name": source_data["name"],
            "class_name": source_data["manageClass_Name"],
            "brand_name": source_data["brand_Name"],
            "unit_name": source_data["unit_Name"],
            # ...其他字段...
        }
    ]
}

# 发送请求至旺店通·企业奇门API接口
response = requests.post("https://api.wangdian.cn/openapi2/goods_push.php", json=payload)

# 检查响应状态并处理结果
if response.status_code == 200:
    print("Data pushed successfully!")
else:
    print(f"Failed to push data: {response.text}")

通过上述步骤和代码示例,我们可以实现从源平台到旺店通·企业奇门API接口的数据ETL转换和写入。这一过程不仅提高了系统间的数据一致性,还增强了业务流程的自动化和效率。 数据集成平台API接口配置

更多系统对接方案