ETL过程详解:云星空到旺店通的销售退货单数据转换

  • 轻易云集成顾问-姚缘

云星空销售退货单(渠道)对接旺店通其他入库单的技术案例

在系统集成领域,数据从一个平台流动到另一个平台时,往往会面临多种挑战。本文聚焦于如何将金蝶云星空的销售退货单(渠道)数据高效、可靠地集成到旺店通·企业奇门中的其他入库单环节。在这个过程中,我们遇到了API调用、分页限流、数据格式转换等一系列复杂问题。通过合理配置和使用轻易云数据集成平台,这些问题得到了有效解决。

首先,在获取金蝶云星空的数据时,我们充分利用其提供的executeBillQuery接口,以确保所有销售退货单信息不会遗漏。同时,为了应对大量数据传输的问题,我们采用了定时抓取机制,通过批量处理方式,将这些数据快速写入到旺店通·企业奇门。从而保证每一笔交易都能及时反映在库存系统中。

其次,在处理API调用方面,金蝶云星空的数据查询与旺店通·企业奇门的数据写入存在显著差异。例如,执行 executeBillQuery 时需要注意分页及限流策略,而在向 wdt.stockin.order.push 写入数据时,则需特别关注其字段映射和格式要求。另外,为防止因网络波动或服务器故障导致的数据丢失,我们还实现了一套异常处理与重试机制。这套机制能够自动记录失败操作,并在适当的时候重新尝试提交,从而增强整个流程的健壮性和容错能力。

最后,本次方案中我们不仅实现了实时监控与日志记录,还针对特定需求进行了接口优化,包括自定义的一些映射规则,使之更好地符合实际业务逻辑。本案例展示的不只是技术上的难题,更体现出精准设计、高效实施以及实时调优的重要性,希望能为类似项目提供有益参考。 金蝶与外部系统打通接口

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

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

接口配置与请求参数

首先,我们需要配置executeBillQuery接口的请求参数。以下是元数据配置中的关键字段:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FEntity_FENTRYID",
  "pagination": {
    "pageSize": 100
  },
  "idCheck": true,
  "request": [
    {"field":"FID","label":"实体主键","type":"string","value":"FID"},
    {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
    {"field":"FSaleOrgId","label":"销售组织","type":"string","value":"FSaleOrgId"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","value":"FStockOrgId"},
    {"field":"FSettleOrgId","label":"结算组织","type":"string","value":"FSettleOrgId"},
    {"field":"FApproveDate","label":"日期","type":"string","value":"FApproveDate"},
    {"field":"FRetcustId","label":"客户","type":"string","value":"FRetcustId"},
    {"field":"FMaterialId_FNumber","label":"物料","type":"string","value":"FMaterialId.FNumber"},
    {"field":"FOwnerIdHead","label":"货主","type":"string","value":"FOwnerIdHead"},
    {"field":"FRealQty","label":"实发数量","type":"string","value":"FRealQty"},
    {"field":"FStockId_FNumber","label":"仓库id","type":"string","value":"FStockId.FNumber"},
    {"field": "FTaxPrice", "label": "含税单价", "type": "string", "value": "FTaxPrice"},
    {"field": "FRetcustId_FNumber", "label": "投诉对应客户", "type": "string", "value": "FRetcustId.FNumber"},
    {"field": "FSrcBillNo", "label": "源单编号", "type": "string", "value": "FSrcBillNo"},
    {"field": "FSalesManId_FName", "label": "销售员", "type": "string", "value": "FSalesManId.FName"},
    {"field": "FEntity_FENTRYID", "label": "", type: string, value: FEntity_FENTRYID},
    {"field" : FPrice, label: 单价, type: string, value: FPrice},
    { field: FBillTypeID, label: 单据类型, type: string, value: FBillTypeID}
  ],
  ...
}

请求示例

根据上述配置,我们构建一个请求示例:

{
  FormId: 'SAL_RETURNSTOCK',
  FieldKeys: 'FID,FBillNo,FSaleOrgId,FStockOrgId,FSettleOrgId,FApproveDate,FRetcustId,FMaterialId.FNumber,FOwnerIdHead,FRealQty,FStockId.FNumber,FTaxPrice,FRetcustId.FNumber,FSrcBillNo,FSalesManId.FName,FEntity_FENTRYID,FPrice,FBillTypeID',
  FilterString: 'FApproveDate>='2023-01-01' AND FDocumentStatus='C' AND FBillTypeID= '64674633836ae2' AND FStockId.FNumber != '037',
  Limit: 100,
  StartRow: 0,
}

数据处理与清洗

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

  1. 字段映射:将金蝶云星空返回的数据字段映射到目标系统所需的字段。例如,将FBillNo映射为目标系统中的订单编号。
  2. 数据格式转换:将日期格式从金蝶云星空的格式转换为目标系统所需的格式。
  3. 数据过滤:根据业务需求过滤掉不必要的数据。例如,只保留状态为已审核(C)的记录。

示例代码

以下是一个使用Python进行数据请求和处理的示例代码:

import requests
import json

# 定义请求参数
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
    'FormId': 'SAL_RETURNSTOCK',
    'FieldKeys': 'FID,FBillNo,...', # 完整字段列表
    'FilterString': 'FApproveDate>=2023-01-01 AND FDocumentStatus=C AND ...',
    'Limit': 100,
    'StartRow': 0,
}

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

# 数据处理
processed_data = []
for record in data:
    processed_record = {
        'order_number': record['FBillNo'],
        # 映射其他字段...
        # 转换日期格式...
        # 数据过滤...
    }
    processed_data.append(processed_record)

# 输出处理后的数据
print(json.dumps(processed_data, indent=4))

通过以上步骤,我们成功地调用了金蝶云星空的executeBillQuery接口,获取并初步加工了销售退货单的数据。这为后续的数据转换和写入打下了坚实的基础。 金蝶与SCM系统接口开发配置

数据集成生命周期中的ETL转换:云星空销售退货单到旺店通其他入库单

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程,特别是如何利用元数据配置来实现这一目标。

API接口配置

我们使用的API接口为wdt.stockin.order.push,通过POST方法提交请求。以下是具体的元数据配置:

{
  "api": "wdt.stockin.order.push",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "merge",
    "field": "FBillNo",
    "bodyName": "goods_list",
    "bodySum": ["FRealQty"],
    "header": ["FBillNo", "FStockId_FNumber"],
    "body": ["FMaterialId_FNumber", "FRealQty", "FTaxPrice"]
  },
  "request": [
    {"field": "is_check", "label": "是否审核", "type": "string", "value": "1"},
    {"field": "outer_no", "label": "外部单号", "type": "string", "value": "{FBillNo}"},
    {"field": "warehouse_no", "label": "仓库编码", "type": "string", "value": "{FStockId_FNumber}"},
    {"field": "remark", "label": "备注", "type": "string", "value":"销售退货单(渠道)"},
    {
      "field":"goods_list",
      "label":"货品明细节点",
      "type":"array",
      ...

数据转换过程

  1. 提取(Extract)

    • 从源平台云星空中提取销售退货单的数据,包括单据编号(FBillNo)、仓库编码(FStockId_FNumber)、物料编码(FMaterialId_FNumber)、实际数量(FRealQty)和税价(FTaxPrice)。
  2. 转换(Transform)

    • 将提取的数据映射到目标平台所需的字段。例如,将FBillNo映射为outer_noFStockId_FNumber映射为warehouse_no
    • 对于货品明细节点,需要将每一项物料信息转换为目标平台所需的格式。在这个过程中,我们使用了模板字符串,例如:{{goods_list.FMaterialId_FNumber}}表示从源数据中获取物料编码。
  3. 加载(Load)

    • 将转换后的数据通过POST方法提交到旺店通·企业奇门API接口。这里需要注意的是,我们设置了一个标志位is_check=1,表示该单据需要审核。

请求示例

以下是一个完整的请求示例:


{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {
                        ...
                        {
                          ...
                          {
                            ...
                            {
                              ...
                              {
                                ...
![数据集成平台API接口配置](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)
更多系统对接方案