实现从金蝶到领星的ETL数据转换与写入解决方案

  • 轻易云集成顾问-吴伟

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

在实际业务场景中,企业经常需要将不同系统之间的数据进行高效、安全且准确的对接。本文将聚焦于一个重要案例:如何通过轻易云数据集成平台,实现从金蝶云星空获取采购入库单,并将其批量写入到领星ERP系统,具体的实施方案被命名为“金蝶采购入库单=>领星入库单v1”。

为了确保每一条采购入库单都能无遗漏地从金蝶云星空传输至领星ERP,我们首先调用了金蝶云的executeBillQuery接口。在整个过程中,不仅要处理API接口分页和限流问题,还需应对两大系统间的数据格式差异。例如,金蝶返回的数据结构与领星所需的数据字段并不完全一致,这就需要我们在中间层进行定制化数据映射。

此外,大量数据快速写入也是此次集成中的关键技术点。我们采用了轻易云的平台特性,有效实现了批量抓取、转换和导入,将大量订单信息可靠、高效地转储到了领星ERP的对应存储模块上。同时,通过实时监控与日志记录功能,对每一次操作进行了透明管理,以便及时识别和处理任何异常情况。

以下是这一实际运行案例的一些核心技术细节及我们的解决方案:

  1. 定时可靠的抓取机制:利用调度任务,每隔固定时间自动调用executeBillQuery接口,从而确保新生成或更新的采购入库单能够按时获取。
  2. 批量快速导入:借助多线程机制,将查询得到的大批量订单信息高效地写入到领星ERP,中途若遇网络波动等异常情况,也可凭借良好的错误重试机制保证上传成功。
  3. 数据格式转换与映射:针对两个系统各自独特的数据结构需求,设计了一系列规则,用于按照源目标映射关系自动调整字段值及类型匹配。
  4. 分页与限流策略:实现API分页调用逻辑避免请求积压以及控制流速以规避触发限流保护措施,使得整体流程更稳定、更顺畅。

通过以上技术手段,在此集成项目中我们不仅达到了预期效果,同时也为后续类似项目提供了一套成熟可行的方法论。 金蝶与SCM系统接口开发配置

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

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

接口配置与请求参数

首先,我们需要了解executeBillQuery接口的基本配置和请求参数。根据提供的元数据配置,我们可以看到该接口使用POST方法进行调用,并且需要传递多个字段来指定查询条件和返回结果的格式。

以下是关键的请求参数配置:

  • FormId: 业务对象表单ID,必须填写金蝶的表单ID,如:STK_InStock
  • FieldKeys: 需查询的字段key集合,通过解析器将数组转换为字符串格式。
  • FilterString: 过滤条件,用于筛选符合条件的数据。
  • Limit: 最大行数,分页参数之一。
  • StartRow: 开始行索引,分页参数之一。

请求示例

为了更好地理解这些参数如何组合在一起,我们来看一个具体的请求示例:

{
  "FormId": "STK_InStock",
  "FieldKeys": "FInStockEntry_FEntryId,FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber,FOwnerTypeIdHead,FOwnerIdHead.FNumber,FDemandOrgId.FNumber,FPurchaseOrgId.FNumber,FSupplierId.FNumber,FStockerGroupId.FNumber,FStockDeptId.FNumber,FCreateDate,FCancelDate,FDeliveryBill,FTakeDeliveryBill,FApproveDate,FCancelStatus,FSupplyId.FNumber,FSettleId.FNumber,FChargeId.FNumber,FBusinessType,FSupplyAddress,FAPSTATUS,FTransferBizType,FDisassemblyFlag,FConfirmDate,FConfirmStatus,FSplitBillType,FPayOrgId.FNumber,FSettleOrgId.FNumber,FSettleCurrId.FNumber,FBillCost,FBillTaxAmount,FBillCostAmount,FBillAllAmount,FSettleTypeId,FExchangeRate,FLocalCurrId.FNumber,FBillAmount,FIsIncludedTax,FOwnerCustomerID.FNumber,FSettleSupplierID.FNumber,FISGENFORIOS,FISPRICEEXCLUDETAX,FISINVOICEARLIER",
  "FilterString": "FApproveDate>='2023-01-01' and FPurchaseOrgId.fnumber = '107'",
  "Limit": 500,
  "StartRow": 0
}

在这个示例中,我们指定了要查询的字段、过滤条件以及分页参数。通过这样的配置,可以确保我们获取到符合条件的数据,并且能够处理大批量数据时进行分页查询。

数据清洗与转换

获取到原始数据后,下一步就是对数据进行清洗和转换。这一步骤至关重要,因为它直接影响到后续的数据写入和业务处理。

  1. 数据清洗:主要包括去除无效数据、处理缺失值以及标准化字段格式。例如,对于日期字段,可以统一转换为标准的ISO格式;对于数值字段,可以确保其精度和单位一致性。

  2. 数据转换:根据目标系统的需求,对字段进行映射和转换。例如,将金蝶云星空中的供应商编号(FSupplierId_FNumber)映射到目标系统中的对应字段,并确保其格式符合目标系统要求。

以下是一个简单的数据清洗与转换示例:

def clean_and_transform(data):
    cleaned_data = []
    for record in data:
        transformed_record = {
            "entry_id": record["FInStockEntry_FEntryId"],
            "bill_no": record["FBillNo"],
            "status": record["FDocumentStatus"],
            "stock_org": record["FStockOrgId_FNumber"],
            "date": convert_to_iso_format(record["FDate"]),
            # 更多字段映射...
        }
        cleaned_data.append(transformed_record)
    return cleaned_data

def convert_to_iso_format(date_str):
    # 假设输入日期格式为 'YYYY-MM-DD'
    return date_str + 'T00:00:00Z'

通过上述代码,我们将原始记录中的部分字段进行了清洗和转换,为后续的数据写入做好准备。

实时监控与错误处理

在实际操作中,实时监控和错误处理也是不可忽视的重要环节。轻易云数据集成平台提供了实时监控功能,可以帮助我们及时发现并解决问题。例如,当接口调用失败或返回异常数据时,可以通过日志记录和报警机制快速定位问题并采取相应措施。

try:
    response = call_execute_bill_query_api(request_payload)
    if response.status_code == 200:
        data = response.json()
        cleaned_data = clean_and_transform(data)
        # 将清洗后的数据写入目标系统
    else:
        log_error("API call failed with status code: {}".format(response.status_code))
except Exception as e:
    log_error("Exception occurred: {}".format(str(e)))

以上代码展示了一个简单的错误处理机制,通过捕获异常并记录错误日志,可以有效提高系统的稳定性和可靠性。

总结来说,通过合理配置请求参数、进行有效的数据清洗与转换,以及实时监控与错误处理,可以确保我们顺利完成从金蝶云星空获取采购入库单数据并进行初步加工处理,为后续的数据写入打下坚实基础。 数据集成平台API接口配置

使用轻易云数据集成平台进行ETL转换并写入领星ERPAPI接口

在数据集成生命周期的第二阶段,我们需要将从源平台(如金蝶)获取的采购入库单数据进行ETL(Extract, Transform, Load)转换,并将其转化为目标平台(领星ERP)能够接收的格式,最终通过API接口写入目标平台。以下是详细的技术实现过程。

1. 数据提取与清洗

首先,我们从金蝶系统中提取采购入库单数据。假设我们已经完成了数据请求和初步清洗阶段,现在我们拥有一个结构化的数据集,该数据集包含如下字段:

  • FBillNo:单据编号
  • FSupplierId_FNumber:供应商编号
  • FStockId_FNumber:仓库编号
  • FSupplyAddress:供应地址
  • FMaterialId_FNumber:物料编号
  • FRealQty:实际数量
  • FMustQty:应收数量
  • FPrice:单价

2. 数据转换

接下来,我们需要根据领星ERP API接口的要求,对上述数据进行转换。根据元数据配置,目标API接口为 /erp/sc/routing/storage/storage/orderAdd,请求方法为POST。以下是具体的字段映射和转换规则:

请求头部(Header):

  • FBillNo -> 单据编号
  • FSupplierId_FNumber -> 供应商编号
  • FStockId_FNumber -> 仓库编号
  • FSupplyAddress -> 供应地址

请求体(Body):

  • 请求体中的核心字段是一个名为 product_list 的数组,其中包含每个物料的详细信息。
    • 每个物料的SKU(库存单位)对应于金蝶系统中的 FMaterialId_FNumber
    • 良品数量对应于金蝶系统中的 FRealQty
    • 次品数量在本例中为空,可以根据实际需求添加相应逻辑
    • 单价对应于金蝶系统中的 FPrice

其他字段:

  • 仓库ID (wid) 和系统仓库 (sys_wid) 分别使用固定值和映射值 {FStockId_FNumber}
  • 状态 (type) 固定为 "2"
  • 备注 (remark) 包含单据编号和供应商编号,以斜杠分隔

3. 数据写入

根据上述转换规则,我们可以构造出符合领星ERP API要求的JSON请求体。以下是一个示例:

{
    "wid": "固定仓库ID",
    "sys_wid": "仓库001",
    "type": "2",
    "product_list": [
        {
            "sku": "物料001",
            "good_num": "100",
            "bad_num": "",
            "price": "10.5"
        },
        {
            "sku": "物料002",
            "good_num": "200",
            "bad_num": "",
            "price": "20.0"
        }
    ],
    "remark": "单据001\\供应商001"
}

4. 实现代码示例

以下是使用轻易云数据集成平台配置并发送请求到领星ERP API接口的代码示例:

import requests

# 构造请求头部信息
header = {
    'FBillNo': '单据001',
    'FSupplierId_FNumber': '供应商001',
    'FStockId_FNumber': '仓库001',
    'FSupplyAddress': '地址001'
}

# 构造请求体信息
body = {
    'wid': '固定仓库ID',
    'sys_wid': header['FStockId_FNumber'],
    'type': '2',
    'product_list': [
        {
            'sku': '物料001',
            'good_num': '100',
            'bad_num': '',
            'price': '10.5'
        },
        {
            'sku': '物料002',
            'good_num': '200',
            'bad_num': '',
            'price': '20.0'
        }
    ],
    'remark': f"{header['FBillNo']}\\{header['FSupplierId_FNumber']}"
}

# 发送POST请求到领星ERP API接口
response = requests.post('https://api.lingxing.com/erp/sc/routing/storage/storage/orderAdd', json=body)

# 检查响应状态码及内容
if response.status_code == 200:
    print("数据成功写入领星ERP")
else:
    print(f"写入失败,错误码: {response.status_code}, 错误信息: {response.text}")

通过上述步骤,我们实现了从金蝶采购入库单到领星ERP入库单的数据ETL转换,并成功将转换后的数据写入目标平台。这一过程充分利用了轻易云数据集成平台提供的元数据配置功能,实现了高效、准确的数据集成。 如何开发金蝶云星空API接口

更多系统对接方案