使用轻易云平台进行ETL转换并对接旺店通API

  • 轻易云集成顾问-张妍琪

用友BIP数据集成到旺店通·企业奇门的技术实现方案

在本技术案例中,我们将详细探讨如何高效地将用友BIP的数据集成到旺店通·企业奇门系统,以解决YS其他出库数据对接云仓的问题。本次实施方案主要涉及以下几个关键点:确保集成过程中数据不漏单、大量数据的快速写入、定时抓取和批量处理等环节。

确保用友BIP数据不漏单

为了保证在与旺店通·企业奇门进行数据对接时,用友BIP系统中的YS其他出库记录不会遗漏,我们采用了实时监控与日志记录机制。通过调用/yonbip/scm/othoutrecord/list API接口,能够及时获取最新的业务出库记录,并配合轻易云平台实时监控功能,实现每一条记录都被精准捕获并处理。

大量数据快速写入到旺店通·企业奇门

当从用友BIP成功获取大量YS其他出库数据后,需要高效、稳定地将其传输至旺店通·企业奇门。在这个步骤中,通过调用 wdt.vip.wms.stockinout.order.push API接口,可以确保大批量的数据迅速且无误地写入,削减延迟和资源消耗。同时,为进一步优化性能,本方案设计了批量处理策略,每次提交指定数量的数据包,提高整体上传效率。

定时可靠的抓取用友BIP接口数据

基于任务调度器,我们设置了定期任务来自动抓取用友BIP新生成的业务出库单信息。这样不仅提升了系统自动化程度,还能减少人为干预可能带来的错误风险。此外,这种机制还能有效平衡服务器负载,避免因过于频繁请求导致API限流或分页问题发生。

处理分页与限流问题

由于API请求限制,当我们需要连续拉取大量数据信息时,不可避免会遇到分页及限流挑战。为应对此类情况,在每次调用 /yonbip/scm/othoutrecord/list 获取几十万条库存出库详情时,通过合理使用offset参数以及引入重试机制,有效规避被限流情形。同时结合缓存策略,大幅提高获取速度及响应率。

总之,本案例展示的不仅是基本流程,更包含了一系列针对实际应用场景下的问题解决方法,如异常处理与错误重试机制、自定义映射规则对接、不同格式间转换等等。这些技术细节将在本文余下章节得到详尽阐述。 钉钉与ERP系统接口开发配置

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

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

接口调用配置

首先,我们需要配置API调用的元数据。以下是该接口的基本配置:

{
  "api": "/yonbip/scm/othoutrecord/list",
  "method": "POST",
  "number": "code",
  "id": "othOutRecords_id",
  "idCheck": true,
  "formatResponse": [
    {"old": "id", "new": "new_id", "format": "string"},
    {"old": "warehouse", "new": "new_warehouse", "format": "string"},
    {"old": "othOutRecords_id", "new": "new_othOutRecords_id", "format": "string"}
  ],
  ...
}

请求参数设置

在请求参数部分,我们需要根据业务需求设置相关字段。例如,分页参数、日期范围、仓库名称等。以下是一些关键请求参数的配置:

{
  "request": [
    {"field": "pageIndex", "label": "页码", "type": "string", "describe": "例:1 默认值:1", "value":"1"},
    {"field": "pageSize", "label":"每页数","type":"string","describe":"例:10 默认值:10","value":"500"},
    {"field":"isSum","label":"查询表头","type":"string","describe":"例:false 默认值:false"},
    {"field":"code","label":"单据编码","type":"string"},
    {"field":"open_vouchdate_begin","label":"开始日期","type":"string"},
    {"field":"open_vouchdate_end","label":"结束日期","type":"string"},
    ...
  ]
}

数据过滤条件

为了确保获取的数据符合业务需求,可以使用过滤条件。例如,以下是一些常见的过滤条件配置:

{
  "simpleVOs":[
    {
      "field1":{
        ...
        {"field":"field","label":"查询字段","type":"string","parent":"params","value":"auditTime"},
        {"field":"op","label":"比较符","type":"string","parent":"params","value":"egt"},
        {"field":"value1","label":"值1","type":"string","describe":"","value":"{{LAST_SYNC_TIME|datetime}}"}
      }
    },
    {
      ...
      {"field2":{
        ...
        {"field":"field","label":"查询字段","type":"string","parent":"params","value":"org"},
        {"field":"op","label":"比较符","type":"string","parent":"params","value":"neq"},
        {"field":"value1","label":"","type":"","describe":"","value":"","parent":"","value1":"","describe":"","value2":"","expr1":"","expr2":"","column":"","condition":[]}
      }}
    }
  ]
}

响应数据格式化

为了便于后续的数据处理和写入,需要对响应数据进行格式化。例如,将原始字段名转换为新的字段名,并指定数据类型:

{
  ...
  {
    "formatResponse":[
      {"old": "id",     "new":  "new_id",   "format"    :   "string"},
      {"old"    :   "warehouse",    "new"   :   "new_warehouse",    "format"    :   "string"},
      {"old"    :   "othOutRecords_id", "new"   :   "new_othOutRecords_id", "format" :      "string"}
     ]
   }
}

实际操作步骤

  1. 配置API调用:在轻易云平台上创建一个新的API调用任务,输入上述元数据配置。
  2. 设置请求参数:根据业务需求填写具体的请求参数,如页码、每页数量、日期范围等。
  3. 添加过滤条件:根据业务逻辑添加必要的过滤条件,以确保获取的数据准确无误。
  4. 格式化响应数据:设置响应数据格式化规则,将原始字段名转换为新的字段名,并指定相应的数据类型。
  5. 执行任务:运行API调用任务,获取并处理数据。

通过上述步骤,我们可以成功调用用友BIP接口/yonbip/scm/othoutrecord/list,并对获取的数据进行有效的加工处理,为后续的数据转换与写入奠定基础。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 金蝶与WMS系统接口开发配置

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

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现过程。

元数据配置解析

我们使用以下元数据配置来完成ETL转换:

{
  "api": "wdt.vip.wms.stockinout.order.push",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "merge",
    "field": "new_warehouse,code",
    "bodyName": "details",
    "bodySum": ["othOutRecords_qty"],
    "header": ["new_warehouse", "omsOutWarehouse", "code", "memo", "bustype_name"],
    "body": ["product_cCode", "othOutRecords_product_cCode", "othOutRecords_qty", "othOutRecords_memo"]
  },
  "request": [
    {"field": "api_outer_no", "label": "外部单号", "type": "string", "describe": "外部单号", "value": "{code}"},
    {"field": "warehouse_no", "label": "仓库编码", "type": "string", "describe": "仓库编码", "value": "{omsOutWarehouse}"},
    {"field": "order_type", "label": "出入类型", "type": string, describe: 可选值:1(出库);2(入库),"value":"1"},
    {"field":"is_check","label":"是否审核","type":"string","describe":"是否审核","value":"1"},
    {"field":"remark","label":"备注","type":"string","describe":"备注","value":"YS{bustype_name}-{memo}"},
    {"field":"goods_list","label":"货品明细节点","type":"array","describe":"货品明细节点","value":"details","children":[{"field":"spec_no","label":"商家编码","type":"string","describe":"商家编码","value":"{{details.othOutRecords_product_cCode}}"},{"field":"num","label":"入库数量","type":"string","describe":"入库数量","value":"{{details.othOutRecords_qty}}"},{"field":"price","label":"原价","type":"string"},{"field":"remark","label":"备注","type:"string,"value:"{{details.othOutRecords_memo}}"}]}
  ],
  otherRequest: [{"field:"stockin_info,"label:"stockin_info,"type:"string,"describe:"111"}]
}

数据转换与写入步骤

  1. 数据请求与清洗

    • 在此阶段,我们从源系统获取原始数据,并进行必要的数据清洗和预处理。这一步骤确保了后续的数据转换能够顺利进行。
  2. 数据转换

    • 使用元数据配置中的operation部分,我们将源数据字段映射到目标API所需的字段。
    • method指定了合并操作,field定义了用于合并的关键字段,bodyName指定了子节点名称,bodySum定义了需要汇总的字段。
    • headerbody分别定义了需要映射的头部和子节点字段。
  3. 构建请求体

    • 根据元数据配置中的request部分,我们构建API请求体。
    • 每个字段都有明确的映射规则,例如,外部单号(api_outer_no)映射到源数据中的{code}字段,仓库编码(warehouse_no)映射到{omsOutWarehouse}字段等。
    • 特别注意货品明细节点(goods_list)的构建,其中包括商家编码、入库数量、备注等信息。
  4. 发送请求

    • 使用HTTP POST方法,将构建好的请求体发送到旺店通·企业奇门API接口。
    • 确保在发送前进行了必要的ID检查(idCheck: true),以避免重复提交或数据冲突。
  5. 处理响应

    • 接收到目标系统的响应后,根据响应状态和内容进行相应处理。
    • 如果成功,则记录日志并更新相关状态;如果失败,则捕获错误信息并进行相应处理,如重试或报警。

示例代码

以下是一个简化的Python示例代码,用于展示如何使用上述元数据配置完成ETL转换并调用目标API:

import requests
import json

# 源数据示例
source_data = {
    'code': '123456',
    'omsOutWarehouse': 'WH001',
    'bustype_name': '销售出库',
    'memo': '订单123456',
    'details': [
        {'othOutRecords_product_cCode': 'P001', 'othOutRecords_qty': 10, 'othOutRecords_memo': '无'},
        {'othOutRecords_product_cCode': 'P002', 'othOutRecords_qty': 5, 'othOutRecords_memo': '无'}
    ]
}

# 构建请求体
request_body = {
    'api_outer_no': source_data['code'],
    'warehouse_no': source_data['omsOutWarehouse'],
    'order_type': '1',
    'is_check': '1',
    'remark': f"YS{source_data['bustype_name']}-{source_data['memo']}",
    'goods_list': [
        {
            'spec_no': item['othOutRecords_product_cCode'],
            'num': item['othOutRecords_qty'],
            'price': '',
            'remark': item['othOutRecords_memo']
        } for item in source_data['details']
    ]
}

# 调用目标API
response = requests.post(
    url='https://api.wangdian.cn/wdt/vip/wms/stockinout/order/push',
    headers={'Content-Type': 'application/json'},
    data=json.dumps(request_body)
)

# 处理响应
if response.status_code == 200:
    print('Data successfully pushed to WDT API')
else:
    print(f'Failed to push data: {response.text}')

通过上述步骤和示例代码,我们可以高效地将源平台的数据经过ETL转换后写入旺店通·企业奇门API接口,实现不同系统间的数据无缝对接。 轻易云数据集成平台金蝶集成接口配置

更多系统对接方案