从数据获取到高效写入:领星ERP与金蝶云星空系统对接实例

  • 轻易云集成顾问-胡秀丛

领星ERP数据集成到金蝶云星空案例分享

在企业的日常运营中,精准高效的数据处理和及时的信息流动至关重要。本文将聚焦一个具体的系统对接集成案例,探讨如何通过轻易云数据集成平台实现领星ERP的数据向金蝶云星空批量写入。本次实际运行方案为“领星调整单=>其他入库单(盘盈)”。

确保数据无漏单:接口调用与定时抓取策略

为了确保从领星ERP获取的数据不出现遗漏,我们使用了/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList API进行周期性的定时抓取。不仅如此,还配置了可靠的错误重试机制,以应对网络波动或服务暂时无法响应的问题。

批量快速写入:优化性能提升效率

由于需要处理的大量数据,我们选择使用金蝶云星空提供的batchSave API,通过批次提交数据,提高了写入性能。同时,为避免频繁请求造成接口限流问题,我们特别设计了一套分页处理策略,使得各个批次之间能够平滑过渡,实现稳定高效的数据传输。

数据格式差异转换与映射

在两个系统的数据格式存在差异情况下,通过轻易云提供的数据转换工具,我们制定了一套精细化的映射规则。例如,将领星ERP中的字段名、类型、结构要求分别对应到金蝶云中的相应部分,从而保证了两端系统间的数据兼容性。在这一过程中,实时监控功能发挥了重要作用,帮助我们及时发现并解决潜在的问题。

异常处理与日志记录机制

面对可能出现的异常情况,如网络超时或接口返回错误码等,我们建立了一整套完备的异常捕获和日志记录制度。从每一次API调用开始,到整个流程结束,每一步都进行了详细日志跟踪,这不仅让故障排查更加迅速,也为后续优化奠定了基础。

这个案例展示的不仅仅是技术上的实现,更凸显出精细管理和准确执行对于成功的重要性。接下来,将深入解析具体实施步骤及相关技术要点。 电商OMS与WMS系统接口开发配置

调用源系统领星ERP接口获取并加工数据

在数据集成生命周期的第一步,我们需要调用源系统领星ERP接口/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList来获取并加工数据。以下是详细的技术实现过程。

接口调用配置

首先,我们需要配置API调用的元数据。根据提供的metadata,API调用配置如下:

  • API路径: /erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList
  • 请求方法: POST
  • 关键字段: order_sn(用于唯一标识订单)
  • 自动填充响应: true

请求参数包括:

  • search_date_type: 时间类型,固定值为2
  • start_date: 开始日期,使用上次同步时间{{LAST_SYNC_TIME|date}}
  • end_date: 结束日期,使用当前时间{{CURRENT_TIME|date}}
  • adjust_status: 单据状态,固定值为20
  • type: 调整类型
  • page: 当前页码,默认值为1
  • page_size: 每页记录数,默认值为20

条件过滤:

  • item_list.adjustment_valid_num > 0

请求参数构建

在实际操作中,我们需要动态生成请求参数。以下是一个示例代码片段,用于构建请求参数:

import requests
from datetime import datetime

# 获取当前时间和上次同步时间
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
last_sync_time = get_last_sync_time()  # 假设有一个函数获取上次同步时间

# 构建请求参数
payload = {
    "search_date_type": "2",
    "start_date": last_sync_time,
    "end_date": current_time,
    "adjust_status": "20",
    "type": "",  # 根据具体需求填写调整类型
    "page": "1",
    "page_size": "20"
}

# 发起POST请求
response = requests.post(
    url="https://api.example.com/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList",
    json=payload
)

# 检查响应状态
if response.status_code == 200:
    data = response.json()
else:
    raise Exception(f"API请求失败,状态码:{response.status_code}")

数据清洗与过滤

在获取到原始数据后,需要对数据进行清洗和过滤。根据metadata中的条件配置,我们只保留item_list.adjustment_valid_num > 0的数据项。以下是一个示例代码片段:

def filter_data(data):
    filtered_data = []
    for item in data.get('item_list', []):
        if item.get('adjustment_valid_num', 0) > 0:
            filtered_data.append(item)
    return filtered_data

cleaned_data = filter_data(data)

数据转换与写入

清洗后的数据需要进行转换,以符合目标系统的要求。假设目标系统要求的数据格式如下:

{
    "order_sn": "",
    "adjustment_valid_num": "",
    // 其他字段...
}

我们可以通过以下代码进行数据转换:

def transform_data(cleaned_data):
    transformed_data = []
    for item in cleaned_data:
        transformed_item = {
            "order_sn": item.get("order_sn"),
            "adjustment_valid_num": item.get("adjustment_valid_num"),
            # 添加其他字段的转换逻辑...
        }
        transformed_data.append(transformed_item)
    return transformed_data

final_data = transform_data(cleaned_data)

最后,将转换后的数据写入目标系统:

def write_to_target_system(final_data):
    for record in final_data:
        # 假设有一个函数write_record用于写入单条记录到目标系统
        write_record(record)

write_to_target_system(final_data)

通过上述步骤,我们完成了从源系统领星ERP接口获取、清洗、转换并写入目标系统的全过程。这一过程确保了数据的准确性和一致性,为后续的数据处理奠定了坚实基础。 打通钉钉数据接口

使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口

在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,最终转为目标平台金蝶云星空API接口所能够接收的格式,并写入目标平台。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,实现这一过程。

1. API接口配置

我们首先需要了解金蝶云星空API接口的基本配置。根据提供的元数据配置,API接口为batchSave,请求方法为POST。以下是具体的请求参数和字段映射:

{
    "api": "batchSave",
    "method": "POST",
    "idCheck": true,
    "operation": {
        "rowsKey": "array",
        "rows": 1,
        "method": "batchArraySave"
    },
    "request": [
        {"field":"FBillNo","label":"单据编号","type":"string","value":"{order_sn}"},
        {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRHLX023"},
        {"field":"FStockOrgId","label":"库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"107"},
        {"field":"FDate","label":"日期","type":"string","value":"{adjustment_time}"},
        {"field":"FEntity","label":"明细信息","type":"array","children":[
            {"field":"FMATERIALID","label":"物料编码","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{item_list.sku}}", "parent": "FEntity"},
            {"field":"FSTOCKID","label":"收货仓库","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "{wid}", "parent": "FEntity"},
            {"field": "FQty", "label": "实收数量", "type": "string", "value": "{{item_list.adjustment_valid_num}}", "parent": "FEntity"}
        ],"value": "item_list"},
        {"field": "FDEPTID", "label": "部门", "type": "object", 
            "default": "0002", 
            "children":[
                {"field": 
                    "FNumber", 
                    "label":
                    FNumber",
                    type":
                    string",
                    value":
                    _mongoQuery 5b577853-b5a2-3950-9171-cc4267fd691a findField=content.FDept where={\"content.FName\":{\"$eq\":\"{create_realname}\"}}"
                }
            ]
        },
        {"field": 
            FNOTE",
            label":
            备注",
            type":
            string",
            value":
            {remark}"
        }
    ],
    otherRequest: [
        { field: FormId, label: 业务对象表单Id, type: string, value: STK_MISCELLANEOUS },
        { field: IsVerifyBaseDataField, label: 验证基础资料, type: bool, value: true },
        { field: Operation, label: 执行的操作, type: string, value: Save },
        { field: IsAutoSubmitAndAudit, label: 提交并审核, type: bool, value: true }
    ]
}

2. 数据提取与转换

在ETL过程中,首先需要从源平台提取数据。假设我们从领星调整单中提取了以下数据:

{
    order_sn: 'ORD123456',
    adjustment_time: '2023-10-01',
    item_list: [
        {
            sku: 'SKU001',
            adjustment_valid_num: 100,
            wid: 'WID001'
        },
        {
            sku: 'SKU002',
            adjustment_valid_num: 200,
            wid: 'WID002'
        }
    ],
    create_realname: 'John Doe',
    remark: '盘盈调整'
}

接下来,我们需要将这些数据转换为金蝶云星空API能够接收的格式。

3. 数据加载与写入

根据元数据配置,我们需要将上述提取的数据映射到目标字段。例如:

  • FBillNo 映射到 {order_sn}
  • FBillTypeID 固定值 QTRHLX023
  • FStockOrgId 固定值 107
  • FDate 映射到 {adjustment_time}
  • FEntity 是一个数组,包含多个子项,每个子项包括 FMATERIALID, FSTOCKID, 和 FQty
  • FMATERIALID 映射到 {item_list.sku}
  • FSTOCKID 映射到 {wid}
  • FQty 映射到 {item_list.adjustment_valid_num}
  • FDEPTID 根据创建人姓名查询得到部门编号
  • FNOTE 映射到 {remark}

通过轻易云数据集成平台,我们可以利用其内置的解析器和映射功能,将源数据转换为目标格式。例如,使用 ConvertObjectParser 将物料编码、收货仓库等字段解析为金蝶云系统中的编码。

最后,通过调用金蝶云星空API接口,将转换后的数据批量保存到目标系统中。以下是一个示例请求:

{
    apiName:"batchSave",
    method:"POST",
    data:{
      FBillNo:"ORD123456",
      FBillTypeID:{ FNumber:"QTRHLX023" },
      FStockOrgId:{ FNumber:"107" },
      FDate:"2023-10-01",
      FEntity:[
          { FMATERIALID:{ FNumber:"SKU001" }, FSTOCKID:{ FNumber:"WID001" }, FQty:"100" },
          { FMATERIALID:{ FNumber:"SKU002" }, FSTOCKID:{ FNumber:"WID002" }, FQty:"200" }
      ],
      FDEPTID:{ FNumber:"0002" },
      FNOTE:"盘盈调整"
    }
}

总结

通过以上步骤,我们成功地将领星调整单的数据经过ETL转换后,写入到了金蝶云星空系统中。利用轻易云数据集成平台的强大功能和灵活配置,可以高效地实现不同系统间的数据无缝对接,大大提升了业务处理效率和准确性。 如何对接企业微信API接口

更多系统对接方案