使用轻易云进行ETL转换并写入金蝶云星空API的完整流程

  • 轻易云集成顾问-何语琴

管易云与金蝶云星空的高效数据集成案例分享:wk_发货单_销售出库单

在实际运营中,多个业务系统的数据互通对于企业的信息流转至关重要。本次技术案例将着眼于如何通过轻易云数据集成平台,实现管易云(Guanyi ERP)中的发货单数据迅速且无缝地对接到金蝶云星空(Kingdee Cloud Cosmic)的销售出库模块。

方案概述

此项目命名为“wk_发货单_销售出库单”,主要任务是利用管易云提供的API接口gy.erp.trade.deliverys.get实时抓取最新的发货单数据,并通过优化后的批量写入方法调用金蝶云星空的API batchSave,以确保大量数据能够快速、准确地写入到目的数据库。在整个过程中,我们还需要应对各种挑战,如分页处理、限流控制以及不同系统间的数据格式差异等问题。

数据获取与处理

  1. 定时可靠的数据抓取: 利用轻易平台调度功能,每隔固定时间调用接口gy.erp.trade.deliverys.get。该接口支持分页查询,因此我们设计了自动化脚本来管理分页请求,确保所有新生成和变动过的发货单都能及时被捕捉。

  2. 限流处理: 为避免因频繁请求带来的接口调用限制问题,在调度服务中实现了智能延迟机制,有效平衡调取频率和每次硬件性能消耗,使得全流程运行更加稳定可靠。

  3. 实时监控与日志记录: 全程使用轻易平台自带的监控面板,对每次API调用进行详细记录,不仅跟踪成功与否,还收录返回状态及具体错误信息,从而便于后期审计和快速错漏修正,提高整体效率及安全性。

数据转换与存储

  1. 格式规范化: 不同系统间往往存在着字段属性及结构上的差异。例如,管易云所输出的是JSON数组,而金蝶要求的是特定XML或专属JSON格式。因此,通过编写映射函数,将原始抓取得到的数据列表,通过简单配置直接转换为目标要求格式,无需额外编码步骤,简化开发流程并减少人为误差可能性。

  2. 批量快速写入: 对大量数据执行分区策略,并凭借高效缓存队列,一组一组地提交给金蝶API batchSave, 实现短时间内大规模、高并发地完成多条记录插入操作。结合重试机制,应对偶尔出现网络延时或宕机引 用友与CRM系统接口开发配置

    调用源系统管易云接口gy.erp.trade.deliverys.get获取并加工数据

在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过调用管易云接口gy.erp.trade.deliverys.get来获取并加工数据,以实现高效的数据集成。

接口配置与请求参数

首先,我们需要配置元数据以便正确调用管易云的API接口。以下是关键的元数据配置:

{
  "api": "gy.erp.trade.deliverys.get",
  "method": "POST",
  "number": "code",
  "id": "code",
  "pagination": {
    "pageSize": 100
  },
  "idCheck": true,
  "omissionRemedy": {
    "crontab": "2 */2 * * *",
    "takeOverRequest": [
      {
        "field": "start_delivery_date",
        "label": "发货时间开始段",
        "type": "string",
        "is_required": false,
        "describe": null,
        "value": "{{DAYS_AGO_1|datetime}}"
      },
      {
        "field": "end_delivery_date",
        "label": "发货时间结束段",
        "type": "string",
        "is_required": false,
        "describe": null,
        "value": "{{CURRENT_TIME|datetime}}"
      }
    ]
  },
  ...
}

请求参数详解

在实际调用过程中,我们需要构建请求参数。以下是主要的请求参数及其作用:

  • start_createend_create: 用于指定创建时间的范围。
  • start_delivery_dateend_delivery_date: 用于指定发货时间的范围,默认值分别为上次同步时间和当前时间。
  • start_modify_dateend_modify_date: 用于指定修改时间的范围。
  • del: 指定是否返回作废单据,0表示不返回作废单据。
  • delivery: 发货状态,1表示已发货。
  • code: 单号,用于唯一标识每个发货单。

分页参数:

  • page_size: 每页返回的数据条数,默认为10,这里我们设置为100以提高效率。
  • page_no: 当前页码,默认为1。

数据获取与清洗

通过上述配置,我们可以发送POST请求到管易云接口以获取发货单数据。以下是一个示例请求体:

{
  "start_create": "",
  "end_create": "",
  ...
  "page_size": 100,
  "page_no": 1
}

在接收到响应后,需要对数据进行清洗和转换。例如,将日期格式统一、去除无效字段等。以下是一个简单的数据清洗示例:

def clean_data(data):
    for record in data:
        # 转换日期格式
        record['delivery_date'] = convert_to_standard_format(record['delivery_date'])

        # 去除无效字段
        if 'unnecessary_field' in record:
            del record['unnecessary_field']

    return data

异常处理与重试机制

在实际操作中,可能会遇到网络异常或API限流等问题。我们需要设计合理的异常处理和重试机制。例如,当请求失败时,可以等待一段时间后重试:

import time

def fetch_data_with_retry(api, params, retries=3, delay=5):
    for attempt in range(retries):
        try:
            response = send_request(api, params)
            if response.status_code == 200:
                return response.json()
            else:
                raise Exception("API Error")
        except Exception as e:
            if attempt < retries - 1:
                time.sleep(delay)
            else:
                raise e

数据写入与存储

最后,将清洗后的数据写入目标系统。这一步通常涉及到数据库操作或调用其他系统的API接口。在轻易云平台上,可以通过可视化界面配置目标系统的连接信息,并使用拖拽式操作完成数据写入。

通过以上步骤,我们实现了从管易云获取发货单数据并进行清洗和存储的完整流程。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 用友与外部系统接口集成开发

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

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现步骤和关键配置。

配置元数据

在进行ETL转换时,首先需要配置好元数据,以确保数据能够正确映射到金蝶云星空API接口所需的格式。以下是元数据配置的详细说明:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {
      "field": "FBillTypeID",
      "label": "单据类型",
      "type": "string",
      "describe": "单据类型",
      "parser": {
        "name": "ConvertObjectParser",
        "params": "FNumber"
      },
      "value": "XSCKD01_SYS"
    },
    {
      ...
    }
  ],
  ...
}

数据字段解析和映射

在上述配置中,request数组中的每个对象代表一个字段映射。以下是几个关键字段的解析和映射说明:

  • FBillTypeID: 单据类型,通过ConvertObjectParser解析器将值转换为金蝶系统所需的格式。
  • FBillNo: 单据编号,直接从源数据中获取并赋值。
  • FDate: 日期,通过模板语法{{delivery_statusInfo.delivery_date|date}}从源数据中提取并格式化日期。
  • FSaleOrgId: 销售组织,同样使用ConvertObjectParser解析器进行转换。

明细信息处理

对于复杂的数据结构,如明细信息,需要使用嵌套数组进行处理:

{
  ...
  {
    "field": "FEntity",
    "label": "明细信息",
    "type": "array",
    ...
    "children": [
      {
        ...
        {
          "field": "FMaterialID",
          ...
          "value": "{{details.sku_code}}"
        },
        {
          ...
          "_function CASE {{details.price}} when 0 then 'true' else 'false' end"
        }
      }
    ],
    ...
  }
}

在这里,每个明细项都包含多个字段,如物料编码(FMaterialID)、实发数量(FRealQty)等,这些字段通过模板语法从源数据中提取并赋值。

API调用和操作配置

完成元数据配置后,需要设置API调用和操作参数:

{
  ...
  {
    ...
    {
      "field": "FormId",
      ...
      "value": "SAL_OUTSTOCK"
    },
    {
      ...
      {
        ...
        {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}
      }
    }
  }
}

这些参数确保了数据能够正确提交到金蝶云星空系统,并自动完成审核流程。

数据清洗与转换

在实际操作中,可能需要对源数据进行一定的清洗和转换,以满足目标平台的要求。例如,将日期格式统一、处理空值或异常值等。这些操作可以通过轻易云的数据处理功能实现。

数据写入目标平台

最后一步是将清洗和转换后的数据通过API接口写入到金蝶云星空系统。根据元数据配置,使用POST方法调用batchSave接口,将整理好的JSON对象发送到目标系统。

通过以上步骤,我们实现了从源平台到目标平台的数据ETL转换,并成功写入金蝶云星空API接口。这一过程不仅确保了数据的一致性和准确性,还大大提升了业务处理效率。 打通用友BIP数据接口

更多系统对接方案