ETL转换及写入金蝶云星空技术案例解析

  • 轻易云集成顾问-姚缘

吉客云·奇门数据集成到金蝶云星空的案例分享:销售订单转销售出库单

在系统集成项目中,高效地实现吉客云·奇门与金蝶云星空之间的数据对接是一个关键的挑战。本文将以实际运行方案(吉客云奇门->金蝶)(线上)销售订单->销售出库单9090为例,深入探讨如何顺利完成这一任务。

为了确保吉客云·奇门的数据准确无误地被写入到金蝶云星空,我们首先利用其API接口jackyun.tradenotsensitiveinfos.list.get来定时抓取数据。这一过程不仅需要解决分页和限流问题,还要处理两者间的数据格式差异。与此同时,为提高大批量数据传输的效率,我们采用了轻易平台提供的批量集成功能,通过调用金蝶云星空的batchSave接口,实现快速写入。

具体实施过程中,透明化和实时监控机制尤为重要。在操作每一步时,可以借助日志记录功能追踪数据流动状态,并在出现异常情况时及时进行错误重试。此外,对接双方的一些特性也需特别注意,例如金蝶云星空所需的数据映射规则、字段匹配以及必要的转换逻辑。这些都将在后续步骤详细解析,以保障整个流程高效稳定。

通过以上技术手段,不仅可以确保业务环节中的每一个订单精准传递,同时也极大程度上提升了企业运营效率及可靠性。在下一部分中,我们将详述从获取吉客云·奇门接口数据,到最终写入金蝶云星空各个技术细节与最佳实践。 用友BIP接口开发配置

调用吉客云·奇门接口获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云·奇门接口jackyun.tradenotsensitiveinfos.list.get,并对返回的数据进行初步加工处理。

接口配置与请求参数

首先,我们需要配置接口的元数据,以便正确调用吉客云·奇门的API。以下是该接口的元数据配置:

{
  "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,taxFee,taxRate"
    },
    {"field": "isDelete", "label": "isDelete", "type": "string"},
    {"field": "tradeStatus", "label": "tradeStatus", "type": "string", "value": "9090"},
    {"field": "tradeTypeList", "label": "tradeTypeList", "type": "string", 
        "value": 
        "1,2,3,4,5,6,7,9,10,11,13,91,92"
        ,"parser":{"name":"StringToArray","params": ","}}
  ],
  "condition":[
    [{"field":"shopCode","logic":"neqv2","value":"0007"},{"field":"goodsDetail.goodsNo","logic":"neqv2","value":"88888"},{"field":"goodsDelivery.tradeId"}]
  ],
    "beatFlat":["goodsDelivery"]
}

请求参数解析

  1. 时间参数startModifiedendModified分别表示查询的起始和结束时间,使用动态变量{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}来获取。
  2. 分页参数pageSizepageIndex用于分页查询,确保每次请求的数据量适中。
  3. 字段选择:通过fields字段指定需要返回的数据字段,包括订单号、商品详情等。
  4. 过滤条件:使用条件过滤器,如排除特定店铺代码(如不等于“0007”)和特定商品编号(如不等于“88888”)。

数据请求与清洗

在完成接口配置后,通过POST方法发送请求以获取数据。返回的数据可能包含多个嵌套结构,如商品详情(goodsDetail)和商品交付信息(goodsDelivery)。我们需要对这些嵌套结构进行扁平化处理,以便后续的数据转换与写入。

以下是一个简单的Python示例,用于发送请求并处理返回的数据:

import requests
import json

url = 'https://api.jackyun.com/tradenotsensitiveinfos/list/get'
headers = {'Content-Type': 'application/json'}
payload = {
    'startModified': '2023-01-01T00:00:00Z',
    'endModified': '2023-01-31T23:59:59Z',
    'pageSize': 100,
    'pageIndex': 1,
    'fields': 'tradeNo,...', # 完整字段列表见上文
    'isDelete': False,
    'tradeStatus': '9090',
    'tradeTypeList': [1,...] # 完整类型列表见上文
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()

# 扁平化处理示例
def flatten_data(data):
    flat_data = []
    for item in data['result']:
        base_info = {k: item[k] for k in item if k != 'goodsDetail'}
        for detail in item['goodsDetail']:
            flat_item = {**base_info}
            flat_item.update(detail)
            flat_data.append(flat_item)
    return flat_data

flat_data = flatten_data(data)

数据转换与写入准备

在完成数据清洗后,可以将扁平化后的数据传递给下一个阶段进行转换与写入。此过程包括将数据映射到目标系统所需的格式,并执行必要的转换逻辑,如单位换算、字段重命名等。

通过上述步骤,我们实现了从吉客云·奇门接口获取并初步加工数据,为后续的数据集成奠定了基础。这一过程展示了如何利用轻易云数据集成平台的强大功能,实现高效、透明的数据处理。 打通企业微信数据接口

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

在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式并写入,是一个至关重要的步骤。本文将详细探讨如何利用轻易云数据集成平台,将吉客云奇门的销售订单数据转换为金蝶云星空API接口所能接收的格式,并最终写入金蝶云星空系统。

数据请求与清洗

首先,我们从吉客云奇门获取销售订单数据。这一步骤包括数据请求和初步清洗,确保数据完整性和一致性。假设我们已经完成了这部分工作,接下来进入关键的ETL(Extract, Transform, Load)过程。

数据转换与写入

我们需要将已清洗的数据转换为金蝶云星空API接口所能接受的格式。以下是具体的元数据配置及其应用:

API接口配置
{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "merge",
    "field": "tradeNo",
    "bodyName": "details",
    "bodySum": ["goodsDetail_goodsDelivery_sendCount"],
    "header": ["tradeNo", "shopCode", "warehouseCode", "sourceTradeNos", "consignTime", "onlineTradeNo"],
    "body": ["goodsDetail_goodsNo", "goodsDetail_goodsDelivery_sendCount", "goodsDetail_goodsDelivery_batchamount", 
             "goodsDetail_goodsDelivery_batchNo", "goodsDetail_shareFavourableAfterFee", 
             "goodsDetail_sellTotal", "goodsDetail_sellCount"]
  },
  ...
}

该配置定义了如何将源数据映射到目标API接口字段中。主要包括以下几个部分:

  1. API基本信息api字段指定了调用的API名称batchSavemethod字段指定了HTTP方法为POST。
  2. 操作配置:通过operation字段定义了合并策略、主键字段、明细体名称以及汇总字段等。
  3. 请求参数映射:通过request数组定义了各个字段的映射关系。
请求参数映射
[
  {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"},
  {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{tradeNo}"},
  {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{consignTime|date}}"},
  {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
  {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shopCode}"},
  ...
]

每个请求参数都包含以下信息:

  • field: 对应金蝶云星空中的字段名。
  • label: 字段标签,用于描述该字段。
  • type: 字段类型,如字符串、日期等。
  • describe: 字段描述。
  • parser: 用于解析和转换值的解析器,例如ConvertObjectParser
  • value: 映射值,可以是静态值或动态值(如模板变量)。
明细信息映射
{
  "field": "FEntity",
  ...
  "children": [
    {"field": "FCustMatID", ...},
    {"field": "FMaterialID", ...},
    {"field": "FBarcode", ...},
    {"field": "FRealQty", ...},
    ...
  ]
}

明细信息通过嵌套结构进行映射,每个子字段都包含类似的配置,确保每个明细项都能正确映射到目标系统中。

特殊处理逻辑

在某些情况下,需要对特定字段进行特殊处理。例如,计算含税单价和判断是否赠品:

{"field": "FTaxPrice", ... , 
"value": "_function {{details.goodsDetail_shareFavourableAfterFee}}/{{details.goodsDetail_sellCount}}"},
{"field": "FIsFree", ... , 
"value": "_function CASE WHEN {{details.goodsDetail_sellTotal}}>0 THEN 'false' ELSE 'true' END"}

这些特殊处理逻辑通过自定义函数实现,以满足业务需求。

数据写入

最后,通过调用配置好的API接口,将转换后的数据写入金蝶云星空系统。整个过程由轻易云数据集成平台自动化执行,确保高效、准确地完成数据集成任务。

以上即是利用轻易云数据集成平台,将吉客云奇门销售订单数据转换并写入金蝶云星空API接口的技术案例。通过合理配置元数据和请求参数,实现了不同系统间的数据无缝对接。 用友与外部系统接口集成开发

更多系统对接方案