从金蝶到聚水潭:实现无缝ETL转换的技术策略

  • 轻易云集成顾问-张妍琪

金蝶-采购入库-->聚水潭-采购入库: 高效、无缝的数据对接案例分享

在企业运营管理中,实现系统间的高效对接和数据集成至关重要。本文将介绍如何利用轻易云数据集成平台,将金蝶云星空的采购入库数据高效地导入到聚水潭系统中,通过实践案例解析关键技术要点和实现机制。

为了完成这项复杂的任务,我们首先需要使用金蝶云星空提供的executeBillQuery接口来抓取采购入库的数据。由于金蝶云星空API存在分页和限流问题,需特别处理这些细节,以确保所有数据均能及时、准确地获取。同时,还要保证批量集成操作中的数据质量,不产生漏单现象。

接下来,我们将通过聚水潭开放的/open/jushuitan/purchasein/upload接口实现大量数据快速写入。在此过程中,需要处理两者之间的数据格式差异,并进行必要的数据转换。同时,为了实时监控整个流程并迅速响应可能出现的问题,我们配备了集中监控与告警系统,实施有效监控和异常检测机制。

在实际应用中,自定义转换逻辑也是一大亮点,使我们能够灵活应对业务需求。另外,通过可视化的数据流设计工具,使得每一步操作都更加直观透明。这不仅提升了效率,也极大简化了管理难度,确保每一个环节清晰易懂并便于维护。 如何对接用友BIP接口

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

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

接口配置与请求参数

首先,我们需要了解executeBillQuery接口的基本配置和请求参数。根据提供的元数据配置,接口的主要参数如下:

  • API名称: executeBillQuery
  • 请求方法: POST
  • 业务对象表单ID: STK_InStock
  • 查询字段集合: 通过FieldKeys指定
  • 过滤条件: 通过FilterString指定
  • 分页参数: 包括Limit, StartRow, TopRowCount

请求参数详解

  1. FieldKeys

    • 该参数用于指定需要查询的字段集合。根据元数据配置,我们可以选择所需的字段,例如:
      "FieldKeys": [
      "FBillNo",
      "FInStockEntry_FEntryId",
      "FDate",
      "FSupplierId.FNumber",
      "FMaterialId.FNumber",
      "FRealQty"
      ]
    • 这些字段包括单据编号、入库日期、供应商编码、物料编码和实收数量等关键信息。
  2. FilterString

    • 用于设置查询过滤条件。例如,我们可以根据单据状态和审核日期进行过滤:
      "FilterString": "FDocumentStatus='C' AND FApproveDate>='2023-01-01'"
  3. 分页参数

    • 为了处理大数据量,分页是必要的。我们可以设置每页返回的最大行数(Limit)和开始行索引(StartRow):
      "Limit": 100,
      "StartRow": 0

请求示例

基于上述配置,一个完整的请求示例如下:

{
  "api": "executeBillQuery",
  "method": "POST",
  "FormId": "STK_InStock",
  "FieldKeys": [
    "FBillNo",
    "FInStockEntry_FEntryId",
    "FDate",
    "FSupplierId.FNumber",
    "FMaterialId.FNumber",
    "FRealQty"
  ],
  "FilterString": "FDocumentStatus='C' AND FApproveDate>='2023-01-01'",
  "Limit": 100,
  "StartRow": 0
}

数据清洗与转换

获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是几个关键步骤:

  1. 字段映射

    • 将金蝶返回的数据字段映射到目标系统所需的字段。例如,将FBillNo映射为目标系统中的订单编号。
  2. 数据格式转换

    • 将日期格式从金蝶特定格式转换为目标系统所需格式。
    • 将数值类型的数据进行单位转换或精度调整。
  3. 数据校验

    • 对关键字段进行校验,如确保单据编号唯一性、实收数量为正数等。

示例代码

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

def clean_and_transform(data):
    cleaned_data = []
    for entry in data:
        transformed_entry = {
            'order_no': entry['FBillNo'],
            'entry_id': entry['FInStockEntry_FEntryId'],
            'date': transform_date(entry['FDate']),
            'supplier_code': entry['FSupplierId.FNumber'],
            'material_code': entry['FMaterialId.FNumber'],
            'quantity': float(entry['FRealQty'])
        }
        if validate_entry(transformed_entry):
            cleaned_data.append(transformed_entry)
    return cleaned_data

def transform_date(date_str):
    # 假设输入格式为 YYYY-MM-DD,输出格式为 DD/MM/YYYY
    return date_str.split('-')[2] + '/' + date_str.split('-')[1] + '/' + date_str.split('-')[0]

def validate_entry(entry):
    return entry['quantity'] > 0 and len(entry['order_no']) > 0

通过上述步骤,我们能够有效地调用金蝶云星空接口获取采购入库数据,并对其进行初步加工,为后续的数据写入和进一步处理奠定基础。这种方法不仅提高了数据处理效率,还确保了数据质量和一致性。 用友与WMS系统接口开发配置

轻易云数据集成平台生命周期的第二步:ETL转换与写入聚水潭API接口

在数据集成过程中,将源平台的数据转换为目标平台可接收的格式是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将金蝶的采购入库数据通过ETL转换,最终写入聚水潭的采购入库API接口。

API接口配置与元数据解析

首先,我们需要理解聚水潭采购入库API接口的元数据配置。以下是该接口的详细配置:

{
    "api": "/open/jushuitan/purchasein/upload",
    "effect": "EXECUTE",
    "method": "POST",
    "idCheck": true,
    "request": [
        {"field": "is_confirm", "label": "是否自动确认单据", "type": "bool", "value": "false"},
        {"field": "excute_confirming", "label": "是否自动审核", "type": "string", "value": "false"},
        {"field": "po_id", "label": "采购单编号", "type": "int", 
         "value": "_findCollection find primaryWriteback.po_id from 7389e0ad-45f1-37e3-8887-5770febb696a where FBillNo={FSRCBillNo}"},
        {"field": "wms_co_id", "label": "仓库", 
         "type": "string", 
         "value": "_findCollection find FJSTID from a4574865-558b-3258-8fe8-ae7e5bfeb538 where FNumber={FStockId_FNumber} F_PAEZ_Assistant=657fa9b5c75fe3"},
        {"field": "supplier_id", 
         "label": "供应商id", 
         "type": "int", 
         "value":"_findCollection find supplier_id from 28c9f45b-ce65-37f2-b5af-ee9ff8760e99 where supplier_code={FSupplierId_FNumber}"},
        {"field":"external_id","label":"外部采购单号","type":"string","describe":"单据上传成功之后对应页面外部单号","value":"{FBillNo}"},
        {"field":"tax_rate","label":"税率","type":"float","value":"_function round({{list.FEntryTaxRate}}/100,2)"},
        {"field":"items","label":"明细列表","type":"array","value":"list",
         "children":[
             {"field":"sku_id","label":"商品编码","type":"string","value":"{FMaterialId_FNumber}"},
             {"field":"qty","label":"数量","type":"int","value":"{{list.FRealQty}}"},
             {"field":"tax_rate","label":"税率","type":"float","value":"_function round({FEntryTaxRate}/100,2)"},
             {"field":"remark","label":"单据体备注","type":"string","value":"{FBillNo}"}
         ]
        },
        {"field":"remark","label":"单据头备注","type":"string","value":"{FBillNo}"}
    ],
    ...
}

数据请求与清洗

在进行ETL转换之前,首先要从源系统(金蝶)获取原始数据,并进行必要的数据清洗和准备。这一步通常包括以下几个步骤:

  1. 数据提取:从金蝶系统中提取采购入库相关的数据,如采购单编号、供应商信息、仓库信息等。
  2. 数据清洗:对提取的数据进行清洗,确保数据完整性和准确性。例如,去除重复记录、处理缺失值等。
  3. 数据映射:根据目标平台(聚水潭)的需求,将源系统字段映射到目标系统字段。

数据转换与写入

接下来,我们重点讨论如何将清洗后的数据进行转换,并通过API接口写入聚水潭系统。

  1. 字段映射与转换

    • po_id(采购单编号):通过 _findCollection 方法从金蝶系统中获取对应的 po_id
    • wms_co_id(仓库):同样使用 _findCollection 方法,根据仓库编号获取对应的 wms_co_id
    • supplier_id(供应商ID):根据供应商代码获取对应的 supplier_id
    • tax_rate(税率):使用 _function round() 方法将税率转换为小数形式。
    • items(明细列表):包括商品编码、数量、税率和备注等字段。
  2. 构建请求体: 根据上述字段映射和转换结果,构建符合聚水潭API接口要求的请求体。示例如下:

{
    “is_confirm”: false,
    “excute_confirming”: false,
    “po_id”: 123456,
    “wms_co_id”: “WH001”,
    “supplier_id”: 78910,
    “external_id”: “PO20231001”,
    “tax_rate”: 0.13,
    “items”: [
        {
            “sku_id”: “SKU001”,
            “qty”: 100,
            “tax_rate”: 0.13,
            “remark”: “PO20231001”
        }
    ],
    “remark”: “PO20231001”
}
  1. 发送请求: 使用POST方法,将构建好的请求体发送到 /open/jushuitan/purchasein/upload 接口,实现数据写入。确保在发送请求前进行必要的验证和错误处理,以提高系统稳定性和可靠性。
import requests

url = 'https://api.jushuitan.com/open/jushuitan/purchasein/upload'
headers = {'Content-Type': 'application/json'}
data = {
    # 构建好的请求体
}

response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    print("Data uploaded successfully")
else:
    print("Failed to upload data:", response.text)

通过以上步骤,我们实现了从金蝶到聚水潭的数据ETL转换和写入。轻易云数据集成平台提供了强大的元数据配置功能,使得复杂的数据集成任务变得更加简便高效。在实际操作中,还需根据具体业务需求进行相应调整,以确保数据准确性和一致性。 企业微信与OA系统接口开发配置

更多系统对接方案