ETL与API接口对接:吉客云奇门到金蝶云星空的数据传输

  • 轻易云集成顾问-卢剑航

吉客云·奇门数据集成到金蝶云星空的实践案例

在实施吉客云·奇门数据集成为金蝶云星空销售出库单项目中,如何高效、准确地完成系统对接与数据同步是关键挑战之一。本文分享一个典型案例,即将(吉客云奇门->金蝶)(线下)销售订单转换成无批号的销售出库单。

首先,我们采用jackyun.tradenotsensitiveinfos.list.get接口从吉客云·奇门获取待处理的数据。为了确保数据不遗漏,我们设计了定时任务,每隔5分钟调用API进行增量抓取。这一过程不仅要求高频次可靠性,还需要实时监控与日志记录,以便及时发现和处理异常。

接着,对于从吉客云·奇门获取的大量销售订单数据,需要快速写入到金蝶云星空系统中。我们使用batchSave API接口,通过批量操作来提高效率。在这个过程中,进行了严格的字段映射和格式转换,例如,将吉客云中的JSON结构转化为符合金蝶要求的XML格式。此外,为了解决分页问题,每次API调用都会检查返回结果中的分页信息,并继续处理未完结部分直至全部完成。

针对两者之间可能出现的数据差异,如编码方式不同、时间格式不一致等问题,我们开发了专用的数据清洗模块进行预处理。同时,为应对网络波动或系统故障引发的数据传输错误,实现了全面的重试机制和错误通知策略,从而保证持久的一致性。

最后,在整个集成过程中,借助可视化操作界面和全生命周期管理功能,对每个流程环节进行透明化监控,使得即使面对复杂场景也能保持高度稳定与可追溯性。这种端到端严密设计极大提升了业务效率,同时减少人力介入带来的潜在错漏风险。 如何对接企业微信API接口

使用轻易云数据集成平台调用吉客云·奇门接口获取并加工数据

在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用吉客云·奇门接口 jackyun.tradenotsensitiveinfos.list.get 来获取并加工销售订单数据。

接口配置与请求参数

吉客云·奇门接口 jackyun.tradenotsensitiveinfos.list.get 主要用于查询销售订单信息。我们需要配置以下请求参数:

  • startModifiedendModified:用于指定查询时间范围,分别表示上次同步时间和当前时间。
  • pageSizepageIndex:用于分页查询,确保一次请求不会返回过多数据。
  • fields:指定需要返回的字段列表,包括订单号、商品详情、费用信息等。
  • isDeletetradeStatustradeTypeList:用于过滤特定状态和类型的订单。

以下是元数据配置示例:

{
  "api": "jackyun.tradenotsensitiveinfos.list.get",
  "effect": "QUERY",
  "method": "POST",
  "number": "tradeNo",
  "id": "tradeNo",
  "idCheck": true,
  "request": [
    {"field": "startModified", "label": "startModified", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}"},
    {"field": "endModified", "label": "endModified", "type": "string", "value": "{{CURRENT_TIME|datetime}}"},
    {"field": "pageSize", "label": "pageSize", "type": "string", "describe":"111", "value":"{PAGINATION_PAGE_SIZE}"},
    {"field": "pageIndex", "label":"pageIndex","type":"string","describe":"111","value":"{PAGINATION_START_PAGE}"},
    {"field":"fields","label":"fields","type":"string","describe":"111","value":"tradeNo,orderNo,shopName,companyName,warehouseName,logisticName,mainPostid,goodsDetail.goodsNo,flagNames,columnExt,sourceAfterNo,goodsDetail.outerId,pickUpCode,expense.expenseFee,expense.expenseItemName,billDate,goodsPlatDiscountFee,goodsDetail.shareOrderDiscountFee,goodsDetail.shareOrderPlatDiscountFee,customizeGoodsColumn9,goodsDetail.goodsId,goodsDetail.goodsNo,goodsDetail.goodsName,goodsDetail.specName,goodsDetail.barcode,goodsDetail.sellCount,goodsDetail.unit,goodsDetail.sellPrice,goodsDetail.sellTotal,goodsDetail.cost,goodsDetail.discountTotal,goodsDetail.discountPoint,goodsDetail.taxFee,goodsDetail.shareFavourableFee,goodsDetail.estimateWeight,goodsDetail.goodsMemo,cateName,cateBrandName,cateTags,isFit,isGift,taxRate,isPresell"}
  ],
  ...
}

数据清洗与转换

在获取到原始数据后,需要进行清洗和转换,以满足目标系统的要求。以下是一些常见的数据处理步骤:

  1. 字段映射:将源系统中的字段映射到目标系统所需的字段。例如,将 tradeNo 映射为目标系统中的订单编号。
  2. 格式转换:根据目标系统的要求,对日期、金额等字段进行格式转换。例如,将日期格式从 YYYY-MM-DD HH:MM:SS 转换为 YYYYMMDDHHMMSS
  3. 数据过滤:根据业务规则过滤不需要的数据。例如,只保留特定状态或类型的订单。

实际案例

假设我们需要将销售订单中的商品详情信息传输到金蝶系统,并且金蝶系统要求商品编号不能为特定值(如 88888),且商品配送信息不能为空。我们可以通过以下方式实现:

  1. 配置请求参数

    {
     ...
     {"field":"shopCode","logic":"eqv2","value":"0007"},
     {"field":"goodsDetail.goodsNo","logic":"neqv2","value":"88888"},
     {"field":"goodsDelivery.sendCount","logic":"isnotnull","value":"null"}
     ...
    }
  2. 调用接口并处理响应

    import requests
    import json
    
    url = 'https://api.jackyun.com/tradenotsensitiveinfos/list/get'
    headers = {'Content-Type': 'application/json'}
    payload = {
       'startModified': '2023-01-01T00:00:00',
       'endModified': '2023-01-31T23:59:59',
       'pageSize': 100,
       'pageIndex': 1,
       'fields': 'tradeNo,...',
       'isDelete': False,
       'tradeStatus': '6000',
       'tradeTypeList': ['1', '2', ...]
    }
    
    response = requests.post(url, headers=headers, data=json.dumps(payload))
    data = response.json()
    
    # 数据清洗与转换
    cleaned_data = []
    for item in data['result']:
       if item['goodsNo'] != '88888' and item['sendCount'] is not None:
           cleaned_data.append({
               'order_no': item['tradeNo'],
               ...
           })
    
    # 将清洗后的数据写入目标系统

通过上述步骤,我们成功地从吉客云·奇门接口获取了销售订单数据,并对其进行了必要的清洗和转换,为后续的数据写入做好了准备。这一过程不仅提高了数据处理的效率,还确保了数据的一致性和准确性。 如何对接企业微信API接口

轻易云数据集成平台ETL转换与金蝶云星空API接口对接技术案例

在数据集成的生命周期中,ETL(提取、转换、加载)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据通过ETL转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。

数据请求与清洗

在开始ETL转换之前,我们需要从源平台(吉客云奇门)获取销售订单数据,并进行初步清洗。这部分内容不在本文讨论范围内,但需要注意的是,清洗后的数据应符合目标平台的要求。

数据转换与写入

轻易云数据集成平台提供了丰富的元数据配置选项,使得数据转换过程更加灵活和高效。以下是一个典型的元数据配置示例,用于将销售订单转化为销售出库单并写入金蝶云星空。

{
  "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"
    },
    {
      ...
    }
  ],
  ...
}

配置解析

  1. 基本信息字段

    • FBillTypeID:单据类型,使用ConvertObjectParser进行解析,参数为FNumber
    • FBillNo:单据编号,通过模板字符串生成,如{tradeNo}-11
    • FDate:日期字段,使用模板字符串和日期格式化函数,如{{consignTime|date}}
    • FSaleOrgId:销售组织,同样使用ConvertObjectParser解析。
  2. 客户信息字段

    • FCustomerID:客户编码,通过模板字符串引用源数据中的客户编码字段。
    • FLinkPhone, FLinkMan, FReceiveAddress: 联系信息直接映射。
  3. 货物明细信息

    • FEntity:包含多个子字段,如物料编码、实发数量、单价等。每个子字段都可以通过模板字符串或函数进行动态赋值。例如:
      • FMaterialID: 使用模板字符串引用源数据中的物料编码,如{{goodsDetail.goodsNo}}
      • FTaxPrice: 使用自定义函数计算含税单价,如 _function {{goodsDetail.shareFavourableAfterFee}}/{{goodsDetail.sellCount}}
  4. 其他配置

    • FormId: 金蝶业务对象表单ID,如SAL_OUTSTOCK
    • Operation: 执行操作,如保存(Save)
    • IsAutoSubmitAndAudit: 是否自动提交并审核,布尔值设置为true

实际应用

通过上述配置,我们可以将清洗后的销售订单数据转化为符合金蝶云星空API接口要求的格式,并通过POST请求批量保存到目标系统中。以下是一个简化的HTTP请求示例:

POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc HTTP/1.1
Host: api.kingdee.com
Content-Type: application/json
Authorization: Bearer <token>

{
  ...
}

在实际应用中,需要确保所有字段和参数都正确映射和解析,以避免因格式不符导致的数据传输失败。

总结

通过详细配置元数据和灵活运用模板字符串及自定义函数,我们能够高效地将源平台的数据转化为目标平台所需的格式,并顺利完成ETL过程。轻易云数据集成平台提供了强大的工具和可视化界面,使这一过程更加透明和高效。 用友BIP接口开发配置

更多系统对接方案