实现轻易云到旺店通WMSAPI接口的数据写入与ETL转换

  • 轻易云集成顾问-钟家寿

金蝶云星空到旺店通WMS的数据集成案例分享

在本次案例中,我们将详细解析如何通过数据集成平台实现金蝶云星空数据与旺店通WMS的无缝对接,具体方案是取消接口-旺店通直接调拨单入库。这个过程主要涉及API接口调用、数据格式转换、分页与限流处理等技术环节。

首先,确保金蝶云星空的数据不漏单至关重要。在该系统中,我们调用了executeBillQuery接口,可以精确抓取所需订单数据。为了提高效率和准确性,实现定时可靠的抓取机制,每隔固定时间触发一次数据获取任务,并记录日志以便实时监控和追踪。

大量数据写入至旺店通WMS需要高效且稳定的解决方案。我们采用批量集成方法,通过批量发送请求给WDT_WMS_ORDER_CANCEL API,以确保整个流程能够快速完成。同时,为保障每一条订单都被正确处理,还配置了一套异常处理与错误重试机制,当出现失败情况时,会自动重新尝试提交直到成功为止。

此外,在对接过程中,需要特别注意两大系统间的数据格式差异。通过自定义映射规则,将金蝶云星空的订单信息转换匹配为旺店通WMS所需的结构。这不仅提升了系统兼容性,也确保了业务逻辑的一致性。

为了应对金蝶云星空API执行中的分页和限流问题,本次方案设计中特别加入了数据分段提取策略及速率控制措施,有效避免由于流量过载导致的数据丢失或服务拒绝问题,从而保证整体集成流程顺畅运行。

接下来,我将进一步巩固这些技术点,详述各个步骤并提供具体代码示例,帮助大家全面掌握此类跨平台数据集成操作要领。 如何对接金蝶云星空API接口

调用金蝶云星空接口executeBillQuery获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口来获取并加工数据。

接口配置与请求参数

首先,我们需要配置接口和请求参数。根据提供的元数据配置,executeBillQuery接口使用POST方法,主要通过单据编号(FBillNo)进行查询。以下是请求参数的详细配置:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FBillNo",
  "pagination": {
    "pageSize": 100
  },
  "idCheck": true,
  "request": [
    {"field":"FBillEntry_FEntryID","label":"FEntryID","type":"string","value":"FBillEntry_FEntryID"},
    {"field":"FID","label":"实体主键","type":"string","value":"FID"},
    {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
    {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
    {"field":"FStockOrgId_FNumber","label":"调入库存组织","type":"string","value":"FStockOrgId.FNumber"},
    {"field":"FDate","label":"日期","type":"string","value":"FDate"},
    {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"},
    {"field":"FTransferBizType","label":"调拨类型","type":"string","value":"FTransferBizType"},
    {"field":"FStockOutOrgId_FNumber","label":"调出库存组织","type":"string","value":"FStockOutOrgId.FNumber"},
    {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"FTransferDirect"},
    {"field":"FNote","label":"备注","type":"string","value":"FNote"},
    {"field":...}
  ],
  "otherRequest": [
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", 
     "parser":{"name": "ArrayToString", "params": ","}},
    {"field":...}
  ]
}

数据请求与清洗

在配置好接口和请求参数后,我们可以开始进行数据请求与清洗。以下是一个示例代码片段,用于调用executeBillQuery接口并处理返回的数据:

import requests
import json

# 配置请求头和URL
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}

# 配置请求体
payload = {
    'FormId': 'STK_TransferDirect',
    'FieldKeys': 'FBillNo,FDate,FStockOrgId.FNumber,FMaterialId.FNumber,FQty',
    'FilterString': 'FCancelDate>=\'2023-01-01\' and FDestStockId.F_JZJ_CheckBox=1',
    'Limit': 100,
}

# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))

# 检查响应状态码
if response.status_code == 200:
    data = response.json()

    # 数据清洗与转换
    cleaned_data = []
    for entry in data:
        cleaned_entry = {
            '单据编号': entry[0],
            '日期': entry[1],
            '调入库存组织': entry[2],
            '物料编码': entry[3],
            '调拨数量': entry[4]
        }
        cleaned_data.append(cleaned_entry)

else:
    print(f"Error: {response.status_code}")

# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4, ensure_ascii=False))

数据转换与写入

在完成数据清洗后,下一步是将清洗后的数据进行转换,并写入目标系统。这一过程通常包括将数据格式转换为目标系统所需的格式,并通过API或其他方式将数据写入目标系统。

例如,如果目标系统是一个ERP系统,我们可能需要将清洗后的JSON数据转换为ERP系统所需的XML格式,并通过ERP系统提供的API进行写入。

import xml.etree.ElementTree as ET

def dict_to_xml(tag, d):
    elem = ET.Element(tag)
    for key, val in d.items():
        child = ET.SubElement(elem, key)
        child.text = str(val)
    return elem

# 将清洗后的数据转换为XML格式
xml_data = ET.Element('Root')
for entry in cleaned_data:
    xml_entry = dict_to_xml('Entry', entry)
    xml_data.append(xml_entry)

# 将XML数据写入文件或通过API发送到目标系统
tree = ET.ElementTree(xml_data)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)

以上示例展示了如何调用金蝶云星空的executeBillQuery接口获取并加工数据,包括从配置请求参数、发起API请求、处理响应数据,到最终的数据转换与写入过程。这些步骤在轻易云数据集成平台上都可以通过可视化操作界面实现,大大简化了复杂的数据集成任务。 企业微信与ERP系统接口开发配置

数据集成与ETL转换:实现轻易云到旺店通WMSAPI接口的数据写入

在数据集成生命周期的第二步中,关键任务是将已经从源平台集成的数据进行ETL(提取、转换、加载)处理,并将其转换为目标平台所能接受的格式。本文将详细探讨如何通过轻易云数据集成平台,将数据转换为旺店通WMSAPI接口所需的格式,并最终成功写入目标平台。

API接口配置与请求参数

在本次案例中,我们需要使用的API接口是WDT_WMS_ORDER_CANCEL,这是一个用于取消订单的接口。该接口采用HTTP POST方法进行数据传输。以下是元数据配置中的具体字段和含义:

  • warehouseCode (仓库编码): 该字段需要从源数据中提取仓库编码,并映射到目标字段FDestStockId_FNumber
  • orderCode (单据编码): 该字段需要从源数据中提取单据编码,并映射到目标字段FBillNo
  • orderType (单据类型): 固定值为"DBRK",表示调拨入库单。
  • cancelReason (取消原因): 该字段需要根据业务逻辑提供具体的取消原因。
  • extendProps (扩展属性): 该字段用于传递其他扩展信息,可以根据需求进行填充。

数据请求与清洗

首先,我们需要从源系统提取相关数据。这一步骤通常包括通过API或数据库查询获取原始数据,然后进行必要的数据清洗和预处理。例如,确保所有必需字段都存在且格式正确,处理缺失值和异常值等。

{
  "FDestStockId_FNumber": "WH123",
  "FBillNo": "ORD456",
  "cancelReason": "客户取消"
}

数据转换与写入

接下来,我们将清洗后的数据进行转换,以符合旺店通WMSAPI接口的要求。我们使用轻易云的数据转换功能,将源数据映射到目标API所需的字段格式。

{
  "api": "WDT_WMS_ORDER_CANCEL",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "warehouseCode",
      "label": "仓库编码",
      "type": "string",
      "value": "{FDestStockId_FNumber}"
    },
    {
      "field": "orderCode",
      "label": "单据编码",
      "type": "string",
      "value": "{FBillNo}"
    },
    {
      "field": "orderType",
      "label": "单据类型",
      "type": "string",
      "value": "DBRK"
    },
    {
      "field": "cancelReason",
      "label": "取消原因",
      "type": "string"
    },
    {
      "field": "extendProps",
      "label": "扩展属性",
      "type": "string"
    }
  ]
}

在上述配置中,warehouseCode, orderCode, 和 cancelReason 字段分别被映射到了源系统中的 FDestStockId_FNumber, FBillNo, 和自定义的取消原因。

实现API调用

最后一步是通过HTTP POST方法将转换后的数据发送到旺店通WMSAPI接口。可以使用轻易云内置的HTTP客户端模块或者其他HTTP库来实现这个过程。

import requests
import json

url = 'https://api.wangdian.cn/wms/order/cancel'
headers = {'Content-Type': 'application/json'}
data = {
    'warehouseCode': 'WH123',
    'orderCode': 'ORD456',
    'orderType': 'DBRK',
    'cancelReason': '客户取消',
    'extendProps': '{}'
}

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

if response.status_code == 200:
    print('订单取消成功')
else:
    print('订单取消失败:', response.text)

以上代码示例展示了如何构建HTTP POST请求,并将转换后的数据发送到目标平台。通过这种方式,我们可以确保源系统的数据被正确地转换并写入到旺店通WMS,实现无缝的数据集成。

总结

通过上述步骤,我们成功地完成了从源系统到旺店通WMSAPI接口的数据ETL转换和写入过程。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。在实际应用中,可以根据具体需求对元数据配置和业务逻辑进行调整,以满足不同场景下的数据集成需求。 金蝶与WMS系统接口开发配置

更多系统对接方案