API接口与数据清洗:实现金蝶订单对接管易云的实战经验

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

金蝶销售订单到管易销售订单数据集成案例分析

在本文中,我们将分享一个实际运行的系统对接集成案例,展示如何通过轻易云数据集成平台,实现金蝶云星空中的销售订单数据无缝、高效地集成到管易云。尤其是重点介绍API接口调用、分页处理、限流机制以及异常处理等关键技术点。

1. 系统背景与目标

本次项目的核心任务是实现金蝶云星空中的销售订单(通过executeBillQuery API获取)顺利写入到管易云(使用gy.erp.trade.add API)。主要挑战包括高吞吐量的数据快速写入、定时可靠的数据抓取,以及各接口之间的数据格式差异。

2. 数据获取与转换

首先,通过金蝶云星空提供的executeBillQuery接口,定时批量抓取最新的销售订单数据。在该过程中,为确保不漏单,我们需要设计合理的分页和限流机制。例如,通过调整每次API请求获取的数据条数,将大批量数据切分为多个小批次进行处理,并监控每个请求的执行状态,避免超时或丢失。

针对从金蝶云星空抓取下来的原始JSON数据,需要进行必要的数据转换,以适应管易云对订单信息字段结构和格式要求。利用轻易云平台提供的自定义数据转换逻辑功能,可以灵活地将源系统字段映射至目标系统对应字段。这一步骤极大程度上减少了手动编程工作,提高了开发效率。

3. 数据写入与优化

为了实现大量数据快速而稳定地写入管易云,在设计方案时我们采用了并发控制和错误重试机制。如果某条记录在首次提交失败,那么系统会自动触发重试逻辑直至成功。此外,通过集中监控和告警体系,可以实时跟踪整个集成任务的状态,一旦发现问题立即告警并采取相应措施,从而保证整体流程畅通无阻。 打通企业微信数据接口

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

在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口来获取销售订单数据,并对其进行初步加工。

接口配置与调用

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

{
  "api": "executeBillQuery",
  "effect": "QUERY",
  "method": "POST",
  "number": "FBillNo",
  "id": "FSaleOrderEntry_FEntryID",
  "name": "FBillNo",
  "idCheck": true,
  ...
}

该配置定义了API的基本信息,包括请求方法(POST)、查询效果(QUERY)以及关键字段(如单据编号FBillNo和分录ID FSaleOrderEntry_FEntryID)。

请求参数设置

在实际调用中,我们需要设置具体的请求参数。这些参数包括但不限于:

  • FSaleOrderEntry_FEntryID: 销售订单分录ID
  • FID: 单据ID
  • FBillNo: 单据编号
  • FDate: 日期
  • FReceiveAddress: 收货地址
  • FLinkMan: 收货人姓名
  • FLinkPhone: 联系电话
  • FTaxPrice: 含税单价
  • FQty: 销售数量
  • FSOStockId.FNumber: 仓库编号

这些字段在元数据配置中已详细列出:

"request": [
    {"field":"FSaleOrderEntry_FEntryID","label":"FSaleOrderEntry_FEntryID","type":"string","describe":"FSaleOrderEntry_FEntryID","value":"FSaleOrderEntry_FEntryID"},
    {"field":"FID","label":"FID","type":"string","describe":"FID","value":"FID"},
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
    ...
]

此外,我们还需要设置分页参数和过滤条件,以确保查询结果的准确性和效率:

"otherRequest": [
    {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"},
    {"field":"StartRow","label":"开始行索引","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"},
    {"field":"FilterString","label":"过滤条件","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and F_UQRW_Combo='是' and FBillTypeID.FNumber='XSDD10_SYS'"}
]

数据获取与初步加工

通过上述配置,我们可以成功调用金蝶云星空的executeBillQuery接口,获取所需的销售订单数据。接下来,我们需要对这些数据进行初步加工,以便后续的数据转换与写入。

  1. 数据清洗:首先,需要确保获取的数据完整且无误。例如,检查每个字段是否存在空值或异常值,并进行相应处理。
  2. 字段映射:根据目标系统(如管易)的需求,将源系统中的字段映射到目标系统。例如,将金蝶中的FBillNo映射到管易中的订单编号。
  3. 格式转换:有些字段可能需要进行格式转换,例如日期格式、金额的小数点位数等。

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

def clean_and_map_data(raw_data):
    cleaned_data = []
    for entry in raw_data:
        if entry['FBillNo'] and entry['FDate']:
            mapped_entry = {
                'order_number': entry['FBillNo'],
                'order_date': convert_date_format(entry['FDate']),
                'customer_name': entry['FLinkMan'],
                'total_amount': float(entry['FTaxPrice']) * int(entry['FQty']),
                ...
            }
            cleaned_data.append(mapped_entry)
    return cleaned_data

def convert_date_format(date_str):
    # 假设原始日期格式为 YYYY-MM-DD,需要转换为 DD/MM/YYYY
    return date_str.split('-')[2] + '/' + date_str.split('-')[1] + '/' + date_str.split('-')[0]

通过上述步骤,我们可以确保从金蝶云星空获取的数据经过清洗和初步加工后,能够顺利进入下一阶段的数据转换与写入过程。

总结

通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口,可以高效地获取销售订单数据,并对其进行初步加工。这一步骤为后续的数据转换与写入奠定了坚实基础。在实际应用中,灵活配置请求参数和过滤条件,以及合理设计数据清洗与映射逻辑,是确保数据集成成功的关键。 泛微OA与ERP系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入管易云API接口的技术案例

在数据集成生命周期的第二步,我们需要将已经从源平台(如金蝶)集成的数据进行ETL转换,使其符合目标平台(如管易云API接口)的格式要求,并最终写入目标平台。本文将详细探讨如何利用元数据配置完成这一过程。

元数据配置解析

我们将通过元数据配置来定义如何将金蝶销售订单的数据转换为管易销售订单所需的格式。以下是具体的元数据配置:

{
  "api": "gy.erp.trade.add",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field": "platform_code", "label": "平台单号", "type": "string", "describe": "111", "value": "{FBillNo}"},
    {"field": "shop_code", "label": "店铺代码", "type": "string", "describe": "111", 
     "value": "_function CASE '{FCustId}' WHEN '002' THEN 'CD0053' WHEN '021' THEN 'CD0032' WHEN '023' THEN 'CD0004' WHEN '025' THEN 'CD0040' WHEN '026' THEN 'CD0043' WHEN '027' THEN 'CD0045' WHEN '028' THEN 'CD0049' WHEN '358' THEN 'CD0046' WHEN 'CO0002' THEN '50010806' WHEN 'CO0003' THEN '50010805' ELSE '50010808' END"},
    {"field": "vip_code", "label": "会员代码", "type": "string", "describe": "111", 
     "value": "JD001"},
    {"field": "warehouse_code", "label": "仓库代码", 
     ...
    }
  ],
  ...
}

数据请求与清洗

首先,我们需要从金蝶系统中获取销售订单的数据。这一步通常涉及到调用金蝶系统的API接口,获取原始的订单数据。假设我们已经成功获取了这些数据,接下来就是对这些数据进行清洗和转换。

数据转换与写入

  1. 字段映射:根据元数据配置中的request部分,将金蝶系统中的字段映射到管易云API接口所需的字段。例如:

    • platform_code 映射到 {FBillNo}
    • shop_code 映射到 _function CASE '{FCustId}' ... END
    • vip_code 固定值 JD001
  2. 函数处理:对于一些需要根据特定逻辑处理的字段,如shop_code,我们使用了 _function CASE 表达式,根据不同的客户ID ({FCustId}) 映射到不同的店铺代码。

  3. 日期时间格式化:对于日期时间字段,如 deal_datetime,我们需要将 {FDate} 转换为目标平台所需的日期时间格式,可以使用 {{FDate|datetime}} 来实现。

  4. 数组处理:对于包含子项的字段,如订单明细(details),我们使用 children 字段来定义每个子项的数据映射。例如:

    • item_code 映射到 _findCollection find F_UQRW_Text from a430738b-c21a-3683-832c-4b519dc241ba where FNumber={FMaterialId}
    • price 映射到 {FTaxPrice}
    • qty 映射到 {FQty}
  5. 请求组装:根据以上映射和处理规则,组装出符合管易云API接口要求的请求报文。

请求示例

以下是一个完整的请求示例:

{
  "platform_code": "<金蝶单号>",
  ...
  ...
  ...
  {
    ...
    ...
    ...
    {
      ...
      ...
      ...
      {
        ...
        ...
        ...
      }
    }
  }
}

API调用

最后,通过HTTP POST方法将组装好的请求报文发送至管易云API接口:

POST /gy.erp.trade.add HTTP/1.1
Host: api.guanyiyun.com
Content-Type: application/json
Authorization: Bearer <access_token>

{
  // 请求报文内容
}

通过上述步骤,我们实现了从金蝶系统到管易云系统的数据ETL转换和写入。此过程中,充分利用了元数据配置,实现了复杂的数据映射和处理逻辑,为业务系统间的数据无缝对接提供了有力支持。 用友与外部系统接口集成开发

更多系统对接方案