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

  • 轻易云集成顾问-卢剑航
### 吉客云·奇门数据集成到金蝶云星空的实践案例 在实施吉客云·奇门数据集成为金蝶云星空销售出库单项目中,如何高效、准确地完成系统对接与数据同步是关键挑战之一。本文分享一个典型案例,即将(吉客云奇门->金蝶)(线下)销售订单转换成无批号的销售出库单。 首先,我们采用jackyun.tradenotsensitiveinfos.list.get接口从吉客云·奇门获取待处理的数据。为了确保数据不遗漏,我们设计了定时任务,每隔5分钟调用API进行增量抓取。这一过程不仅要求高频次可靠性,还需要实时监控与日志记录,以便及时发现和处理异常。 接着,对于从吉客云·奇门获取的大量销售订单数据,需要快速写入到金蝶云星空系统中。我们使用batchSave API接口,通过批量操作来提高效率。在这个过程中,进行了严格的字段映射和格式转换,例如,将吉客云中的JSON结构转化为符合金蝶要求的XML格式。此外,为了解决分页问题,每次API调用都会检查返回结果中的分页信息,并继续处理未完结部分直至全部完成。 针对两者之间可能出现的数据差异,如编码方式不同、时间格式不一致等问题,我们开发了专用的数据清洗模块进行预处理。同时,为应对网络波动或系统故障引发的数据传输错误,实现了全面的重试机制和错误通知策略,从而保证持久的一致性。 最后,在整个集成过程中,借助可视化操作界面和全生命周期管理功能,对每个流程环节进行透明化监控,使得即使面对复杂场景也能保持高度稳定与可追溯性。这种端到端严密设计极大提升了业务效率,同时减少人力介入带来的潜在错漏风险。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用吉客云·奇门接口获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用吉客云·奇门接口 `jackyun.tradenotsensitiveinfos.list.get` 来获取并加工销售订单数据。 #### 接口配置与请求参数 吉客云·奇门接口 `jackyun.tradenotsensitiveinfos.list.get` 主要用于查询销售订单信息。我们需要配置以下请求参数: - `startModified` 和 `endModified`:用于指定查询时间范围,分别表示上次同步时间和当前时间。 - `pageSize` 和 `pageIndex`:用于分页查询,确保一次请求不会返回过多数据。 - `fields`:指定需要返回的字段列表,包括订单号、商品详情、费用信息等。 - `isDelete`、`tradeStatus` 和 `tradeTypeList`:用于过滤特定状态和类型的订单。 以下是元数据配置示例: ```json { "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. **配置请求参数**: ```json { ... {"field":"shopCode","logic":"eqv2","value":"0007"}, {"field":"goodsDetail.goodsNo","logic":"neqv2","value":"88888"}, {"field":"goodsDelivery.sendCount","logic":"isnotnull","value":"null"} ... } ``` 2. **调用接口并处理响应**: ```python 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接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换与金蝶云星空API接口对接技术案例 在数据集成的生命周期中,ETL(提取、转换、加载)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据通过ETL转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在开始ETL转换之前,我们需要从源平台(吉客云奇门)获取销售订单数据,并进行初步清洗。这部分内容不在本文讨论范围内,但需要注意的是,清洗后的数据应符合目标平台的要求。 #### 数据转换与写入 轻易云数据集成平台提供了丰富的元数据配置选项,使得数据转换过程更加灵活和高效。以下是一个典型的元数据配置示例,用于将销售订单转化为销售出库单并写入金蝶云星空。 ```json { "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请求示例: ```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接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)