数据ETL转换与写入:从金蝶系统到旺店通旗舰版

  • 轻易云集成顾问-潘裕

金蝶云星空到旺店通·旗舰版的数据集成案例分享

在实际业务场景中,实现跨系统的数据集成往往充满挑战。本文将重点介绍一个具体的系统对接集成案例,展示如何通过标准方案“金蝶-其他出库单——>旺店通-内部仓退(其他出库)”高效实现金蝶云星空数据到旺店通·旗舰版的无缝衔接。

首先,为确保从金蝶云星空获取的数据不漏单,我们利用其提供的API接口executeBillQuery进行定时可靠抓取。这一步至关重要,因为正确、及时地获取全量数据是后续所有处理步骤的基础。在处理接口分页和限流问题时,通过合理设置请求频率及解析分页参数,保证了接口调用的稳定性与效率。

随后,大量数据需要快速、安全地写入到旺店通·旗舰版中。我们采用批量操作方式,在调用wms.stockout.Other.createOther API进行写入前,进行了必要的数据预处理和格式转换,以应对两者之间可能存在的数据格式差异。除此之外,还设计了完善的异常处理与错误重试机制。当出现网络波动或服务异常等情况时,可以高效识别并重新尝试,使得整个流程具备更高鲁棒性。

为了加强透明度和监控力度,全程记录了详细日志,并结合实时监控手段,对每一步操作进行跟踪。这不仅大大提升了故障排查速度,也为后期优化提供了宝贵依据。

上述方法论是本次技术案例分享的重要组成部分,接下来,将逐步详解各个环节中的关键技术细节。 打通金蝶云星空数据接口

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

在数据集成的生命周期中,调用源系统接口获取数据是关键的第一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口,并对获取的数据进行初步加工。

接口概述

executeBillQuery是金蝶云星空提供的一个用于查询单据信息的API接口。该接口支持POST请求方式,能够根据指定的过滤条件和字段集合返回相应的数据。以下是该接口的一些关键元数据配置:

  • API名称: executeBillQuery
  • 请求方式: POST
  • 主要字段:
    • FBillNo: 单据编号
    • FEntity_FEntryID: 分录主键ID
    • FID: 实体主键
    • FDocumentStatus: 单据状态
    • FStockOrgId_FNumber: 库存组织编号
    • FDate: 日期
    • FBillTypeID: 单据类型
    • FMATERIALID_FNumber: 物料编码
    • FSTOCKID_FNumber: 收货仓库编号

请求参数配置

在调用executeBillQuery接口时,需要配置一系列请求参数。这些参数包括查询条件、分页参数以及需要返回的字段集合等。以下是一个典型的请求参数配置示例:

{
    "FormId": "STK_MisDelivery",
    "FieldKeys": [
        "FBillNo",
        "FEntity_FEntryID",
        "FID",
        "FDocumentStatus",
        "FStockOrgId.FNumber",
        "FDate",
        "FBillTypeID",
        "FMATERIALID.FNumber",
        "FSTOCKID.FNumber"
    ],
    "FilterString": "FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FStockOrgId.FNumber='101' and FSTOCKID.F_TBIK_Assistant_qtr = '内部仓' and FBillTypeID.FNUMBER in ('QTCKD01_SYS') and FDate>='2024-08-05 17:30:00'",
    "Limit": "{PAGINATION_PAGE_SIZE}",
    "StartRow": "{PAGINATION_START_ROW}",
    "TopRowCount": 0
}

数据清洗与加工

获取到原始数据后,需要对其进行清洗和初步加工,以确保数据质量和一致性。以下是一些常见的数据清洗与加工步骤:

  1. 字段映射与转换: 将金蝶云星空返回的数据字段映射到目标系统所需的字段。例如,将FBillNo映射为目标系统中的单据编号。

  2. 数据格式化: 对日期、数值等字段进行格式化处理。例如,将日期格式统一为YYYY-MM-DD

  3. 数据过滤: 根据业务需求,对不符合条件的数据进行过滤。例如,只保留单据状态为已审核的数据。

  4. 合并与拆分: 根据业务逻辑,对某些字段进行合并或拆分处理。例如,将多个物料编码合并为一个字符串,或将一个备注字段拆分为多个子字段。

示例代码

以下是一个使用轻易云数据集成平台调用executeBillQuery接口并对返回数据进行初步加工的示例代码:

import requests
import json

# 配置请求参数
payload = {
    "FormId": "STK_MisDelivery",
    "FieldKeys": [
        "FBillNo",
        "FEntity_FEntryID",
        "FID",
        ...
    ],
    ...
}

# 发起POST请求
response = requests.post("https://api.kingdee.com/executeBillQuery", data=json.dumps(payload))

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

    # 数据清洗与加工
    processed_data = []
    for record in data:
        processed_record = {
            "单据编号": record["FBillNo"],
            ...
        }

        # 数据格式化处理,例如日期格式化
        processed_record["日期"] = format_date(record["FDate"])

        # 数据过滤,例如只保留已审核单据
        if record["FDocumentStatus"] == 'C':
            processed_data.append(processed_record)

    # 输出处理后的数据
    print(processed_data)
else:
    print(f"请求失败,状态码:{response.status_code}")

通过上述步骤,我们可以成功地从金蝶云星空获取所需的数据,并对其进行初步清洗和加工,为后续的数据转换与写入奠定基础。 钉钉与WMS系统接口开发配置

轻易云数据集成平台:ETL转换与写入旺店通·旗舰版API接口

在数据集成生命周期的第二步,我们将重点探讨如何将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台——旺店通·旗舰版API接口所能够接收的格式,最终实现数据的写入。以下是具体操作步骤和技术细节。

API接口元数据配置

在进行ETL转换时,首先需要了解目标平台API接口的元数据配置。以下是我们使用的元数据配置:

{
  "api": "wms.stockout.Other.createOther",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field": "outer_no", "label": "外部单号", "type": "string", "value": "{FBillNo}"},
    {"field": "warehouse_no", "label": "仓库编号", "type": "string", "value": "{FSTOCKID_FNumber}"},
    {"field": "remark", "label": "表头备注", "type": "string", "value": "{FNOTE}"},
    {"field": "is_check", "label": "是否审核", "type": "string", "value":"true"},
    {"field": "reason", "label": "出库原因", "type":"string","value":"{F_TBIK_CKLX}"},
    {
      "field":"goods_list",
      "label":"明细",
      "type":"array",
      "value":"list",
      "children":[
        {"field":"spec_no","label":"SKU","type":"string","value":"{FMATERIALID_FNumber}"},
        {"field":"num","label":"出库数量","type":"string","value":"{FBaseQty}"},
        {"field":"remark","label":"明细备注","type":"string","value":"{FEntryNote}"}
      ]
    }
  ],
  ...
}

数据提取与清洗

首先,我们从源平台提取数据并进行清洗。假设我们从金蝶系统中提取了一个出库单的数据,包含以下字段:

  • FBillNo:外部单号
  • FSTOCKID_FNumber:仓库编号
  • FNOTE:表头备注
  • F_TBIK_CKLX:出库原因
  • FMATERIALID_FNumber:SKU
  • FBaseQty:出库数量
  • FEntryNote:明细备注

这些字段需要经过清洗和转换,以匹配目标平台API接口的要求。

数据转换

在数据转换阶段,我们根据元数据配置将源数据字段映射到目标API接口所需的字段格式。具体映射关系如下:

  • 外部单号 (outer_no) 对应 {FBillNo}
  • 仓库编号 (warehouse_no) 对应 {FSTOCKID_FNumber}
  • 表头备注 (remark) 对应 {FNOTE}
  • 是否审核 (is_check) 固定值 "true"
  • 出库原因 (reason) 对应 {F_TBIK_CKLX}
  • 明细列表 (goods_list) 包含:
    • SKU (spec_no) 对应 {FMATERIALID_FNumber}
    • 出库数量 (num) 对应 {FBaseQty}
    • 明细备注 (remark) 对应 {FEntryNote}

我们通过轻易云的数据处理功能,将上述映射关系配置到ETL流程中。

数据写入

最后一步是将转换后的数据通过POST请求写入到旺店通·旗舰版API接口。以下是一个示例请求体:

{
  "outer_no": "<FBillNo>",
  "warehouse_no": "<FSTOCKID_FNumber>",
  ...
  ...
}

其中,<FBillNo><FSTOCKID_FNumber>等占位符会被实际的数据替换。

实际案例应用

假设我们有一条从金蝶系统提取的数据如下:

{
  ...
}

通过轻易云平台进行ETL转换后,生成的请求体如下:

{
  ...
}

然后,通过HTTP POST请求,将该请求体发送到旺店通·旗舰版API接口,实现数据写入。

总结

以上内容展示了如何利用轻易云数据集成平台完成从金蝶系统到旺店通·旗舰版API接口的数据ETL转换和写入过程。通过详细的元数据配置和映射关系,我们能够高效地实现不同系统间的数据无缝对接。 钉钉与CRM系统接口开发配置

更多系统对接方案