ETL转换与旺店通API写入:数据集成关键步骤详解

  • 轻易云集成顾问-曹润

金蝶云星空数据高效集成到旺店通·企业奇门的技术实践

在复杂的供应链和库存管理系统中,如何实现不同平台之间的数据流畅交互至关重要。本案例将展示如何通过合理配置与调用API接口,实现金蝶云星空上的采购入库单数据无缝对接到旺店通·企业奇门系统上。

首先,我们需要从金蝶云星空获取最新的采购入库单,为此我们使用其提供的executeBillQuery接口。此接口支持分页查询,通过合理设定分页参数,可以有效处理海量记录以防止漏单。而为了确保数据抓取的时效性和可靠性,可以采用定时任务机制,周期性地拉取新产生的数据。

{
  "apiName": "executeBillQuery",
  "payload": {
    // 查询条件与分页设置
  }
}

接收到来自金蝶云星空的数据后,需要进行格式转换,以符合旺店通·企业奇门要求。由于二者在数据结构上可能存在较大差异,这一步尤为关键。例如,两端系统可能在字段命名、日期格式等方面不一致,需要进行批量映射转换,以确保每条记录都能准确写入目标系统。

完成数据转换之后,即可应用旺店通·企业奇门提供的wdt.stockin.order.push API,将经过处理后的采购入库单提升至目标平台。这一过程需特别注意异常处理与错误重试机制,以应对网络波动或API限流问题。同时,对于每一次操作都要做好实时监控和日志记录,及时捕获并解决潜在问题,提高整个流程的可靠性及透明度。

{
  "apiName": "wdt.stockin.order.push",
  "payload": {
    // 转换后的采购入库单信息
  }
}

此外,由于两个平台间流转的是大量业务敏感数据,必须严格落实权限控制及安全措施。同样,对于各个步骤所涉及的元数据信息统一管理,也有助于简化维护工作,并提高整体操作效率。

通过上述步骤,本案例展示了一种高效且稳健的方法,将金蝶云星空中的采购入库单成功集成进了旺店通·企业奇门,为客户业务透明、高速运行奠定了坚实基础。在实际实施过程中,还需根据具体业务需求,对某些环节做出适当优化调整,从而进一步提升性能表现。 金蝶与WMS系统接口开发配置

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

在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的executeBillQuery接口,获取采购入库单数据并进行初步加工。

接口配置与请求参数

首先,我们需要配置调用金蝶云星空接口的元数据。根据提供的元数据配置,我们可以看到executeBillQuery接口的主要参数和字段。以下是关键字段及其描述:

  • api: executeBillQuery
  • method: POST
  • number: FBillNo
  • id: FInStockEntry_FEntryId
  • request: 包含了所有需要查询的字段及其描述。

请求参数解析

为了确保请求能够成功,我们需要正确设置请求参数。以下是一些关键参数及其用途:

  1. FormId: 业务对象表单Id,必须填写金蝶的表单ID,例如:STK_InStock
  2. FieldKeys: 需查询的字段key集合,格式为数组,例如:["FBillNo", "FDate", "FSupplierId.FNumber"]
  3. FilterString: 过滤条件,用于筛选特定的数据,例如:FBillTypeID.FNumber='RKD01_SYS' and FDocumentStatus='C' and FStockId.FNumber='001' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'
  4. LimitStartRow: 分页参数,用于控制返回的数据量。

示例请求配置

以下是一个示例请求配置,用于获取特定条件下的采购入库单数据:

{
    "FormId": "STK_InStock",
    "FieldKeys": ["FBillNo", "FDate", "FSupplierId.FNumber", "FMaterialId.FNumber", "FRealQty"],
    "FilterString": "FBillTypeID.FNumber='RKD01_SYS' and FDocumentStatus='C' and FStockId.FNumber='001' and FApproveDate>='2023-01-01'",
    "Limit": 100,
    "StartRow": 0
}

数据处理与清洗

获取到原始数据后,需要对数据进行初步清洗和加工,以便后续的数据转换与写入步骤。以下是一些常见的数据处理操作:

  1. 字段映射与重命名:将原始字段映射到目标系统所需的字段。例如,将FBillNo映射为目标系统中的订单编号。
  2. 数据类型转换:确保所有字段的数据类型符合目标系统要求。例如,将日期字符串转换为标准日期格式。
  3. 缺失值处理:处理缺失或不完整的数据,确保数据完整性。例如,将缺失的供应商编号填充为默认值。

示例代码实现

以下是一个示例代码片段,展示如何使用轻易云平台调用金蝶云星空接口并处理返回的数据:

import requests
import json

# 配置请求参数
payload = {
    "FormId": "STK_InStock",
    "FieldKeys": ["FBillNo", "FDate", "FSupplierId.FNumber", "FMaterialId.FNumber", "FRealQty"],
    "FilterString": "FBillTypeID.FNumber='RKD01_SYS' and FDocumentStatus='C' and FStockId.FNumber='001' and FApproveDate>='2023-01-01'",
    "Limit": 100,
    "StartRow": 0
}

# 发起POST请求
response = requests.post("https://api.kingdee.com/executeBillQuery", data=json.dumps(payload), headers={"Content-Type": "application/json"})

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

    # 数据清洗与加工
    processed_data = []
    for entry in data:
        processed_entry = {
            "order_number": entry["FBillNo"],
            "entry_date": entry["FDate"],
            "supplier_id": entry["FSupplierId.FNumber"],
            "material_id": entry["FMaterialId.FNumber"],
            "quantity_received": entry["FRealQty"]
        }
        processed_data.append(processed_entry)

    # 输出处理后的数据
    print(json.dumps(processed_data, indent=4))
else:
    print(f"Error: {response.status_code}, {response.text}")

通过上述步骤,我们成功调用了金蝶云星空的executeBillQuery接口,获取了采购入库单数据,并进行了初步清洗和加工,为后续的数据转换与写入做好了准备。这一步骤在整个数据集成生命周期中至关重要,确保了源系统数据能够准确、高效地传递到目标系统。 数据集成平台API接口配置

轻易云数据集成平台生命周期第二步:ETL转换与写入旺店通·企业奇门API接口

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

API接口元数据配置解析

在进行ETL转换之前,我们需要详细了解目标API接口的元数据配置。以下是针对wdt.stockin.order.push接口的元数据配置:

{
    "api": "wdt.stockin.order.push",
    "effect": "EXECUTE",
    "method": "POST",
    "idCheck": true,
    "request": [
        {
            "field": "outer_no",
            "label": "外部单号",
            "type": "string",
            "describe": "外部单号",
            "value": "{FBillNo}"
        },
        {
            "field": "warehouse_no",
            "label": "仓库编号",
            "type": "string",
            "describe": "仓库编号",
            "value": "{FStockId_FNumber}"
        },
        {
            "field": "remark",
            "label": "备注",
            "type": "string",
            "describe": "备注",
            "value": "采购入库"
        },
        {
            ...
        }
    ],
    ...
}

数据请求与清洗

在ETL过程的第一步,我们需要从源系统获取原始数据,并对其进行清洗和预处理。假设我们从金蝶系统中获取了采购入库单的数据,原始数据可能包含如下字段:

  • FBillNo(单据编号)
  • FStockId_FNumber(仓库编号)
  • FMaterialId_FNumber(物料编码)
  • FRealQty(实际数量)
  • FPrice(原价)
  • FTaxPrice(含税价格)

数据转换

根据旺店通·企业奇门API接口的要求,我们需要将上述原始数据字段映射到目标字段,并进行必要的格式转换。以下是具体的字段映射关系:

  1. 外部单号 (outer_no)

    • 源字段:FBillNo
    • 转换:直接映射
  2. 仓库编号 (warehouse_no)

    • 源字段:FStockId_FNumber
    • 转换:直接映射
  3. 备注 (remark)

    • 固定值:"采购入库"
  4. 是否审核 (is_check)

    • 固定值:"1"
  5. 货品明细节点 (goods_list)

    • 子字段包括商家编码、入库数量、原价、入库价等
    • 对应源字段分别为FMaterialId_FNumber、FRealQty、FPrice、FTaxPrice等

具体代码实现如下:

def transform_data(source_data):
    transformed_data = {
        'outer_no': source_data['FBillNo'],
        'warehouse_no': source_data['FStockId_FNumber'],
        'remark': '采购入库',
        'is_check': '1',
        'reason': '',  # 可选项,根据业务需求填充
        'goods_list': []
    }

    for item in source_data['list']:
        goods_item = {
            'spec_no': item['FMaterialId_FNumber'],
            'stockin_num': item['FRealQty'],
            'src_price': item['FPrice'],
            'stockin_price': item['FTaxPrice'],
            'batch_no': '',  # 可选项,根据业务需求填充
            'tax': ''  # 可选项,根据业务需求填充
        }
        transformed_data['goods_list'].append(goods_item)

    return transformed_data

数据写入

完成数据转换后,我们需要将转换后的数据通过POST请求写入到旺店通·企业奇门API接口。以下是示例代码:

import requests

def push_to_wdt(transformed_data):
    url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.push'
    headers = {'Content-Type': 'application/json'}

    response = requests.post(url, json=transformed_data, headers=headers)

    if response.status_code == 200:
        print('Data pushed successfully:', response.json())
    else:
        print('Failed to push data:', response.status_code, response.text)

# 示例调用
source_data = {
    # 假设这是从金蝶系统获取的数据
}
transformed_data = transform_data(source_data)
push_to_wdt(transformed_data)

以上代码展示了如何将源平台的数据经过ETL转换后,推送到旺店通·企业奇门API接口。通过这种方式,可以实现不同系统间的数据无缝对接,确保数据准确、高效地传递和处理。

在实际应用中,还需根据具体业务需求,对元数据配置和转换逻辑进行细化和调整,以满足各种复杂场景下的数据集成需求。 钉钉与WMS系统接口开发配置

更多系统对接方案