ETL与数据集成:从金蝶物料数据到旺店通货品档案

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

金蝶云星空数据集成到旺店通·旗舰奇门的最佳实践

在本篇技术案例中,我们将着重探讨如何通过轻易云数据集成平台,将金蝶云星空的数据高效地对接到旺店通·旗舰奇门,实现数据在两大系统间的无缝流转。方案命名为:旗舰-金蝶-物料——>旺店通-货品档案。在实际运行过程中,确保数据不漏单、快速写入和异常处理等多方面细节,是该项目成功的关键。

为了实现这一目标,首先需要通过调用金蝶云星空API (executeBillQuery)来获取需要集成的数据。这一接口具备强大的查询功能,但也存在分页与限流问题,需要合理设计请求策略,以避免因超出API限制而导致的数据抓取失败或延迟。同时,通过定时调度机制,确保数据能够可靠且及时地被抓取,使整个过程具有高度的一致性和准确性。

API 调用与分页限流处理

执行 executeBillQuery 接口是我们的首要任务,通过设置合适的分页参数,可以有效规避单次请求量过大的风险。在解决了如何高效、稳定获取源头数据后,我们还需应对这些原始数据同目标系统之间格式差异的问题。

数据格式转换与映射

从金蝶云星空导出的物料信息,其字段结构可能与旺店通·旗舰奇门要求并不一致。因此,在数据进入目的端前,需要进行必要的格式转换以及定制化的数据映射。这一步骤不仅包括简单字段对应关系,还涉及必要的数据清洗和标准化操作,以保证最终提交给 wdt.goods.goods.push 接口的数据满足其规范要求。

快速批量写入技术

针对大量物料记录,应采用分批次、多线程并行写入的方法,提高整体效率。每个批次都通过调用 wdt.goods.goods.push 接口,将整理好的产品信息上传至旺店通·旗舰奇门系统。特别是在海量数据场景下,这种处理方式尤为重要,可以显著降低单线程长时间运行所带来的性能瓶颈及错误率。此外,还需配置相应的日志记录与监控机制,对每一次推送结果进行实时跟踪,并将在传输过程中出现的问题如实记录,便于后续分析及故障排查。

上述内容仅为此项目开头部分简要描述。在接下来的具体实施方案中,将进一步详细说明如何配置相关参数、优化接口调用策略,以及关于异常处理与重试机制等方面的重要技巧。

打通钉钉数据接口

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

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

接口配置与请求参数

首先,我们需要配置元数据,以便正确调用金蝶云星空的API。以下是我们在轻易云平台上配置的元数据:

{
  "api": "executeBillQuery",
  "effect": "QUERY",
  "method": "POST",
  "number": "FNumber",
  "id": "FMasterId",
  "name": "FNumber",
  "request": [
    {"field":"FMasterId","label":"id","type":"string","describe":"id","value":"FMasterId"},
    {"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"},
    {"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"},
    {"field":"FSpecification","label":"规格型号","type":"string","describe":"规格型号","value":"FSpecification"},
    {"field":"FOldNumber","label":"旧物料编码","type":"string","describe":"旧物料编码","value":"FOldNumber"},
    {"field":"FDescription","label":"描述","type":"string","describe":"描述","value":"FDescription"},
    {"field":"FErpClsID","label":"物料属性","type":"string","describe":"物料属性","value":"FErpClsID"},
    {"field":"FForbidStatus","label":"禁用状态","type":"string","describe":"禁用状态","value":"FForbidStatus"},
    {"field": "FilterString", "label": "过滤条件", "type": "string", 
     "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", 
     "value": "FUseOrgId.fnumber='101' and FModifyDate>='{{LAST_SYNC_TIME|dateTime}}' and FForbidStatus='A'"}
  ],
  ...
}

在这个配置中,api字段指定了我们要调用的API名称为executeBillQuery,请求方法为POST。请求参数包括多个字段,如FMasterIdFNumberFName等,这些字段将用于查询和过滤数据。

数据请求与清洗

通过上述配置,我们可以发送一个HTTP POST请求到金蝶云星空的API端点,获取所需的数据。在这个过程中,我们可以利用过滤条件来限定返回的数据范围。例如:

{
  "FormId": "BD_MATERIAL",
  "FieldKeys": ["FMasterId", "FNumber", "FName", ...],
  "FilterString": "FUseOrgId.fnumber='101' and FModifyDate>='2023-01-01T00:00:00' and FForbidStatus='A'",
  ...
}

这里,FormId指定了业务对象表单ID为物料表单(BD_MATERIAL),而FilterString则用于过滤出特定组织下且未禁用的物料数据,并且这些数据是在指定时间之后修改过的。

数据转换与写入

获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在轻易云平台上,可以通过可视化操作界面,对数据进行映射和转换。例如,将金蝶云星空返回的数据字段映射到旺店通系统所需的字段格式。

假设我们从金蝶云星空获取到以下原始数据:

[
  {
    "FMasterId": "1001",
    "FNumber": "MAT001",
    ...
  },
  ...
]

我们可以将这些字段映射到旺店通系统所需的字段,例如:

[
  {
    "id": "1001",
    "code": "MAT001",
    ...
  },
  ...
]

通过这种方式,可以确保不同系统之间的数据格式一致,从而实现无缝对接。

实时监控与调试

在整个过程中,轻易云平台提供了实时监控和调试功能,可以随时查看数据流动和处理状态。这有助于快速发现和解决问题,提高集成效率。

综上所述,通过合理配置元数据并利用轻易云平台强大的功能,我们可以高效地调用金蝶云星空接口获取并加工数据,为后续的数据集成打下坚实基础。 打通企业微信数据接口

数据集成与ETL转换:从金蝶物料到旺店通货品档案

在数据集成的生命周期中,将源平台的数据进行ETL(提取、转换、加载)转换是关键的一步。本文将深入探讨如何使用轻易云数据集成平台,将金蝶物料数据转换为旺店通·旗舰奇门API接口所能接收的格式,并最终写入目标平台。

元数据配置解析

在进行ETL转换之前,首先需要理解元数据配置。以下是我们将要使用的元数据配置:

{
  "api": "wdt.goods.goods.push",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "goodsInfo",
      "label": "货品信息",
      "type": "object",
      "describe": "111",
      "children": [
        {
          "field": "goods_no",
          "label": "货品编号",
          "type": "string",
          "describe": "代表货品(spu)所有属性的唯一编号,用于系统货品区分,SPU概念介绍,单击这里",
          "value": "{FNumber}"
        },
        {
          "field": "goods_type",
          "label": "货品类别",
          "type": "string",
          "describe": 
            ...
        }
      ]
    },
    {
      ...
    }
  ],
  ...
}

数据提取与转换

  1. 提取数据:从金蝶系统中提取物料信息。假设我们已经通过API或数据库查询获取了以下字段:

    • FNumber:物料编号
    • FMaterialGroup_FNumber:物料类别编号
    • FName:物料名称
    • FBaseUnitId_FNAME:基本单位名称
    • FSpecification:规格
  2. 字段映射:根据元数据配置,将金蝶系统中的字段映射到旺店通API所需的字段。

    • goods_no 映射到 {FNumber}
    • goods_type 映射到 {FMaterialGroup_FNumber}
    • goods_name 映射到 {FName}
    • short_name 映射到 {FName}
    • class_name 根据条件映射,如果 {FMaterialGroup_FNumber} 是 '成品' 或 '赠品',则为空,否则为原值。
    • prop4 映射到 {FNumber}
    • auto_create_bc 固定为 true
    • unit_name 映射到 {FBaseUnitId_FNAME}
    • spec_no 映射到 {FNumber}
    • spec_name 映射到 {FSpecification}
  3. 数据转换

    {
      ...
      {
        field: 'goodsInfo',
        label: '货品信息',
        type: 'object',
        children: [
          { field: 'goods_no', value: extractedData.FNumber },
          { field: 'goods_type', value: extractedData.FMaterialGroup_FNumber },
          { field: 'goods_name', value: extractedData.FName },
          { field: 'short_name', value: extractedData.FName },
          { field: 'class_name', value: function() {
              return ['成品', '赠品'].includes(extractedData.FMaterialGroup_FNumber) ? '' : extractedData.FMaterialGroup_FNumber;
            } 
          },
          { field: 'prop4', value: extractedData.FNumber },
          { field: 'auto_create_bc', value: true },
          { field: 'unit_name', value: extractedData.FBaseUnitId_FNAME }
        ]
      },
      {
        field: 'specInfoList',
        label: '单品信息列表',
        type: 'array',
        children:[
           { field:'spec_no',value :extractedData.FNumber},
           {field:'spec_name',value :extractedData.FSpecification}
         ]
      }
      ...
    }

写入目标平台

完成数据转换后,通过POST请求将整理好的数据发送至旺店通·旗舰奇门API接口:

const axios = require('axios');

const data = {
  goodsInfo:{
    goods_no : extractedData.FNumber,
    goods_type : extractedData.FMaterialGroup_FNumber,
    goods_name : extractedData.FName,
    short_name : extractedData.FName,
    class_name : (['成品','赠品'].includes(extractedData.FMaterialGroup_FNumber)) ? '' : extractedData.FMaterialGroup_FNumber,
    prop4 : extractedData.FNumber,
    auto_create_bc : true,
    unit_name : extractedData.FBaseUnitId_FNAME
  },
  specInfoList:[{
     spec_no :extractedData.FNumber,
     spec_name :extractedData.FSpecification
  }]
};

axios.post('https://api.wangdian.cn/openapi2/goods_push.php', data)
.then(response => console.log(response.data))
.catch(error => console.error(error));

通过以上步骤,我们成功地将金蝶系统中的物料信息转换并写入到了旺店通·旗舰奇门平台。整个过程不仅确保了数据的一致性和准确性,还极大地提高了业务处理效率。 打通用友BIP数据接口

更多系统对接方案