ETL转换与数据写入:实现跨平台数据集成

  • 轻易云集成顾问-黄宏棵

物料对接聚水潭:金蝶云星空数据集成案例分享

在企业信息管理系统中,实现跨平台的数据无缝对接是提高业务透明度和效率的关键。本文将分享一个具体的技术案例,即如何通过轻易云数据集成平台,将金蝶云星空的数据成功集成到聚水潭系统中。本次方案命名为“物料对接聚水潭”,目标是确保高效、稳定地完成数据同步。

项目背景及目标

本项目涉及从金蝶云星空获取最新物料信息,并将这些信息快速写入到聚水潭系统中,满足企业对于实时数据更新的需求。主要挑战在于处理API接口差异、高吞吐量的数据传输能力以及实时监控和异常处理机制。

数据获取与转换

首先,通过调用金蝶云星空提供的executeBillQuery API接口,我们定时抓取所需的物料数据信息。在此过程中,需要考虑分页和限流问题,以避免因请求过多导致服务器拒绝服务。同时,为了应对不同业务场景下的数据结构需求,我们利用轻易云的平台功能实现自定义数据转换逻辑,使得原始数据能够匹配聚水潭要求的格式。

数据写入与监控

在完成必要的数据清洗与转换后,下一步是批量将整理好的物料信息快速写入到聚水潭,通过调用jushuitan.itemsku.upload API实现该操作。在此环节,高吞吐量的数据写入能力显得尤为重要,它确保大量数据能以最快速度同步至目标系统,从而提升整体运行效率。

为了确保整个流程不漏单且可靠性高,我们引入了集中化监控和告警系统,对每个集成任务进行实时跟踪。当遇到错误或异常情况时,及时触发告警并自动重试,以保障最终数据的一致性和准确性。此外,通过详细日志记录,每一笔操作都有据可查,方便日后的追溯分析。

以上即是我们在“物料对接聚水潭”项目实施过程中的主要技术要点。在下文中,会更深入探讨具体实施步骤及注意事项,包括如何解决两大平台间的数据格式差异、API调用细节以及异常处理策略等。 金蝶与MES系统接口开发配置

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

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

接口配置与请求参数

首先,我们需要配置调用金蝶云星空接口的元数据。以下是元数据配置的关键部分:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FNumber",
  "id": "FMATERIALID",
  "pagination": {
    "pageSize": 100
  },
  "idCheck": true,
  "request": [
    {"field":"FMATERIALID","label":"实体主键","type":"string","value":"FMATERIALID"},
    {"field":"FNumber","label":"编码","type":"string","value":"FNumber"},
    {"field":"FName","label":"名称","type":"string","value":"FName"},
    {"field":"FSpecification","label":"规格型号","type":"string","value":"FSpecification"},
    {"field":"FOldNumber","label":"旧物料编码","type":"string","value":"FOldNumber"},
    {"field":"FBARCODE","label":"条码","type":"string","value":"FBARCODE"},
    {"field":"FDescription","label":"描述","type":"string","value":"FDescription"},
    {"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","value":"FMaterialGroup.FNumber"},
    {"field":"FErpClsID","label":"物料属性","type":"string","value":"FErpClsID"},
    {"field":"FDocumentStatus","label":"数据状态","type":"string","value":"FDocumentStatus"},
    {"field":...}
  ],
  "otherRequest": [
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
    {"field":...}
  ]
}

构建请求体

根据上述元数据配置,我们需要构建一个请求体来调用executeBillQuery接口。以下是一个示例请求体:

{
  "FormId": "BD_MATERIAL",
  "FieldKeys": [
    "FMATERIALID",
    "FNumber",
    ...
  ],
  "FilterString": "{{LAST_SYNC_TIME|dateTime}} and FUseOrgId.FNumber='100' and F_PSEH_CheckBox= '1'",
  ...
}

在这个请求体中,FormId指定了业务对象表单Id为BD_MATERIAL,即物料表单。FieldKeys字段列出了我们需要查询的字段集合,而FilterString则是过滤条件,用于筛选符合条件的数据。

数据清洗与转换

一旦我们成功获取到数据,下一步就是对数据进行清洗和转换。在轻易云平台上,可以通过自定义脚本或内置功能实现这一过程。例如,我们可以使用以下Python脚本来清洗和转换数据:

def clean_and_transform(data):
    cleaned_data = []

    for item in data:
        transformed_item = {
            'MaterialID': item['FMATERIALID'],
            'Code': item['FNumber'],
            'Name': item['FName'],
            'Specification': item['FSpecification'],
            ...
        }
        cleaned_data.append(transformed_item)

    return cleaned_data

在这个脚本中,我们遍历原始数据,将每个字段映射到新的键值对,并添加到清洗后的数据列表中。

数据写入目标系统

最后一步是将清洗和转换后的数据写入目标系统。这一步通常涉及调用目标系统的API接口,将处理好的数据发送过去。在轻易云平台上,可以通过配置目标系统的API元数据并使用相应的操作步骤来实现这一过程。

例如,假设我们要将处理后的物料数据写入聚水潭系统,可以配置如下元数据:

{
  ...
}

然后,通过轻易云平台提供的数据写入功能,将清洗后的数据批量写入目标系统。

综上所述,通过轻易云平台调用金蝶云星空接口executeBillQuery获取并加工物料数据,是一个涉及多个步骤和技术细节的过程。通过合理配置元数据、构建请求体、清洗与转换数据,以及最终写入目标系统,可以高效地实现不同系统间的数据无缝对接。 打通企业微信数据接口

物料对接聚水潭API接口的ETL转换与写入

在轻易云数据集成平台的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台聚水潭API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节,特别是如何利用元数据配置来实现这一目标。

API接口与元数据配置

在进行ETL转换时,我们需要根据聚水潭API接口的要求,将源平台的数据字段映射到目标平台所需的字段格式。以下是聚水潭API接口jushuitan.itemsku.upload的元数据配置:

{
    "api": "jushuitan.itemsku.upload",
    "method": "POST",
    "idCheck": true,
    "request": [
        {"field": "sku_id", "label": "商品编码", "type": "string", "describe": "商品编码", "value": "{FNumber}"},
        {"field": "unit", "label": "单位", "type": "string", "describe": "单位", "value": "{FBaseUnitId_FName}"},
        {"field": "shelf_life", "label": "保质期", "type": "int", "describe": "保质期", 
            "value":"_function case when '{FExpPeriod}'>0 then '1095' else '' end"},
        {"field": "i_id",   "label":"款式编码","type":"string","describe":"款式编码","value":"{FNumber}"},
        {"field":"brand","label":"品牌,可更新","type":"string","describe":"品牌,可更新","value":"{F_ABCD_ASSISTANT}"},
        {"field":"vc_name","label":"虚拟分类,可更新","type":"string","describe":"虚拟分类,可更新"},
        {"field":"c_name","label":"商品分类,必须是[商品类目管理]中的叶子节点,可更新",
            "type":"string","describe":"商品分类,必须是[商品类目管理]中的叶子节点,可更新",
            "value":"{FMaterialGroup_Fname}"},
        {"field":"s_price","label":"基本售价,可更新","type":"float","describe":"基本售价,可更新",
            "value":"1"},
        {"field":"item_type","label":"商品属性,可选值[\"成品\", \"半成品\", \"原材料\", \"包材\"],可更新",
            "type":"string","describe":"商品属性,可选值[\"成品\", \"半成品\", \"原材料\", \"包材\"],可更新",
            "value":"成品"},
        {"field":"l","label":"长,可更新","type":"float","describe":"长,可更新"},
        {"field":"w","label":"宽,可更新","type":"float","describe":"宽,可更新"},
        {"field":"h","label":"高,可更新","type":"float","describe":"高,可更新"},
        {"field":"pic","label":"图片地址,可更新","type":"string","describe":"图片地址,可更新"},
        {"field ":"pic_big ","label ":"大图地址 ,可 更新 ","type ":"string ","describe ":"大图地址 ,可 更新 "},
        {" field ":"sku_pic ","label ":"商品图片 ,可 更新 ","type ":"string ","describe ":"商品图片 ,可 更新 "},
        {" field ":"name ","label ":"名称 ,可 更新 ","type ":"string ","describe ":"名称 ,可 更新 ","value ":"{ FName }"},
        {" field ":"remark ","label ":"备注 ,可 更新 ","type ":"string ","describe ":"备注 ,可 更新 "},
        {" field ":"properties_value ","label ":"颜色及规格 ,可 更新 ","type ":"string ","describe ":"颜色及规格 ,可 更新 ",
            "value ": "{ FSpecification }"},
        {" field ": “short_name ”,“ label ”:“简称 ,可 更新 ”,“ type ”:“ string ”,“ describe ”:“简称 ,可 更新 ”},
        {“ field ”: “ weight ”,“ label ”:“重量 ,可 更新 ”,“ type ”:“ float ”,“ describe ”:“重量 ,可 更新 ”},
        {“ field ”: “ enabled ”,“ label ”:“是否启用 ,默认值1, 可选值: -1=禁用, 0=备用, 1=启用”,
            “ type”:“ int”,“ describe”:“是否启用,默认值1, 可选值: -1=禁用, 0=备用, 1=启用”,
            “ value”:“ 1”},
       {“ field”: “ supplier_name”,“ label”: “供应商名称”, “ type”: “ string”,“ describe”: “供应商名称”,
       {“ field”: “ supplier_sku_id”,“ label”: “供应商商品编码”, “ type”: “ string”,“ describe”: “供应商商品编码”,
       {“ field”: “ supplier_i_id”,“ label”: “供应商款式编码”, “ type”: “ string”,“ describe”: “供应商款式编码”,
       {“ field”:“ other_price_1”,“ label”:“其它价格1”,“ type”:“ float”,“ describe”:“其它价格1”, 
       {“ field”:“ other_price_2”,“ label”:“其它价格2”,“ type”:“ float”,“ describe”:“其它价格2”, 
       {“ field”:“ other_price_3”,“ label”:“其它价格3”,“ type”:“ float”,“ describe”:“其它价格3”, 
       {“ field”:‘other_price_4’,‘ label’:‘其它价格4’,‘ type’:‘ float’,‘ describe’:‘其它价格4’, 
       {‘ field’:‘other_price_5’,‘ label’:‘其它价格5’,‘ type’:‘ float’,‘ describe’:‘其它价格5’,
       { ‘field’ : ‘other_1’ , ‘ label ’ : ‘其他属性1’, ‘类型’ : ‘字符串’, ‘描述’ : ‘其他属性1’, ‘可以更改’ :
      { ‘字段’ : ‘other_2’ , ‘标签 ’ : ‘其他属性2’, ‘类型’ : ‘字符串’, ‘描述’ : ‘其他属性2’, ‘可以更改’ :
      { '字段' : 'other_3' , '标签 ' : '其他属性3', '类型' : '字符串', '描述' : '其他属性3', '可以更改':
      {'字段': 'other_4', '标签': '其他属性4', '类型': '字符串', '描述': '其他属性4', '可以更改':
      {'字段': 'other_5', '标签': '其他属性5', '类型': '字符串', '描述': '其他属性5', 可以更改:
      {'字段':'stock_disabled','标签':'禁止同步','true=禁止','false=允许','可以更改','类型':'bool','描述':'禁止同步','true=禁止','false=允许','可以更改',
      {'字段':'cost_price','标签':'成本价','可以更改','类型':'float','描述':'成本价',
      {'字段':'market_price','标签':'市场|吊牌价,可以更改','类型':'float','描述':'市场|吊牌价,可以更改',
      {'字段':'batch_enabled','标签':'是否启用生产批次 ','类型':'字符串 ','描述 ':'市场 | 吊牌价 ','可以更改 ','价值 ':' _function case when '{ FIsKFPeriod }'= =' true' then' 1 else' 0 end ','默认值 ':' true'}],
    }

数据映射与转换

在进行数据映射和转换时,需要注意以下几点:

  • 字段映射:将源平台的数据字段映射到目标平台所需的字段。例如,将源平台的FNumber映射到聚水潭API中的sku_id
  • 数据类型转换:确保源数据和目标数据的类型一致。例如,将源平台中的整数型保质期(FExpPeriod)转换为目标平台所需的整数型保质期(shelf_life)。
  • 条件处理:根据业务逻辑对某些字段进行条件处理。例如,如果源平台中的保质期大于0,则将其设置为1095天,否则为空。
  • 默认值设置:对于某些必填字段,如果源数据没有提供相应值,可以设置默认值。例如,将enabled字段默认设置为1(启用)。

实际案例

假设我们有一条来自源平台的数据记录如下:

{
    "FNumber": "12345",
    "FBaseUnitId_FName": "件",
    "FExpPeriod": 365,
    "F_ABCD_ASSISTANT": "",
    ...
}

通过ETL转换后,我们需要生成如下符合聚水潭API要求的数据格式:

{
    "sku_id": "12345",
    "unit": "件",
    ...
}

具体实现步骤如下:

  1. 读取源数据:从源系统中读取原始数据。
  2. 映射与转换:根据元数据配置进行字段映射和数据转换。
  3. 生成请求报文:将转换后的数据生成符合聚水潭API要求的请求报文。
  4. 发送请求:通过HTTP POST方法将请求报文发送到聚水潭API接口。

示例代码

以下是一个简单的示例代码,用于展示如何进行上述步骤:

import requests
import json

# 源数据示例
source_data = {
    ...
}

# 转换后的目标数据
target_data = {
    ...
}

# 聚水潭API URL
api_url = "<聚水潭API URL>"

# 发送POST请求
response = requests.post(api_url, json=target_data)

# 检查响应状态码
if response.status_code == 200:
    print("Data uploaded successfully")
else:
    print("Failed to upload data:", response.text)

通过以上步骤,我们能够实现从源系统到聚水潭系统的数据无缝对接,并确保每个环节的数据准确性和一致性。这不仅提高了业务流程的效率,还保证了数据处理过程的透明度和可靠性。 轻易云数据集成平台金蝶集成接口配置

更多系统对接方案