使用轻易云平台进行ETL处理并写入金蝶云星空

  • 轻易云集成顾问-吕修远
### 易仓数据集成到金蝶云星空:R入库单(其他)-其他入库单 在系统对接与数据集成的技术实现中,易仓数据的高效可靠传输到金蝶云星空至关重要。本案例详细解析了如何通过轻易云数据集成平台,实现将R入库单(其他)的信息从易仓无缝传输并批量写入金蝶云星空,确保业务流程的顺畅运行。 首先,我们必须确保从易仓系统获取的数据准确无误,不漏单。为此,通过调用`getReceiving`接口定时抓取最新的R入库单(其他)信息,并设置了分页和限流机制,以应对大数据量情况中的潜在性能瓶颈和请求限制问题。实时监控与日志记录则让我们能够迅速捕捉并处理任何可能的数据异常。 其次,为保证大量订单信息能快速稳定地写入到金蝶云星空,我们利用了其提供的`batchSave` API接口,实现高效批量操作。同时,在对接过程中,针对两套系统之间可能存在的数据格式差异,通过定制化的数据映射,将每个字段进行准确转换,保障数据信息的一致性和完整性。 此外,还设立了严密的错误重试机制。当出现网络波动或接口响应异常等状况时,可自动重试相关操作,以最大限度降低人工干预需求,提高整体流程自动化水平。 本次案例不仅展示了主要API调用及其相关配置,更强调断点续传、分页抓取以及实时监控等关键技术细节。这些实践经验可以为类似行业应用场景提供有益参考,有助于进一步提升多源数据整合方案的稳定性和效率。 ![打通钉钉数据接口](https://pic.qeasy.cloud/D8.png~tplv-syqr462i7n-qeasy.image) ### 调用易仓接口getReceiving获取并加工数据 在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用易仓接口`getReceiving`来获取并加工数据,以实现数据的有效集成。 #### 接口配置与请求参数 调用易仓接口`getReceiving`需要配置相应的元数据。以下是该接口的元数据配置: ```json { "api": "getReceiving", "method": "POST", "number": "receiving_code", "id": "receiving_id", "idCheck": true, "beatFlat": ["product_info"], "request": [ {"field": "receiving_code", "label": "入库单号", "type": "string", "describe": "入库单号,支持多个示例:[\"R11111111111\",\"R222222222\"]"}, {"field": "reference_no", "label": "客户参考号", "type": "string", "describe": "客户参考号"}, {"field": "tracking_number", "label": "跟踪号", "type": "string", "describe": "跟踪号"}, {"field": "po_code", "label": "采购单号", "type": "string", "describe": "采购单号"}, {"field": "warehouse_id", "label": "仓库Id", "type": "string", "describe":"仓库Id"}, {"field":"receiving_type","label":"类型","type":"string","describe":"类型:\n0标准,\n1订单退货,\n2指定产品退件,\n3中转,\n4采购,\n5其它,\n6借用归还入库,\n7初始化库存,\n8不良品入库,\n9盘盈,\n10调拨\n11换货,\n12同步服务商库存,\n13出库单入库,\n14同步添加库存,\n15赠品入库","value":"5"}, {"field":"receiving_status","label":"入库单状态","type":"string","describe":"入库单状态:\n0删除,\n1草稿,\n2确认,\n3待审核,\n4审核,\n5在途,\n6收货中,\n7收货完成","value":"7"}, {"field":"productBarcode","label":"产品代码","type":"string","describe":"产品代码"}, {"field":"productBarcode_like","label":"产品代码(模糊)","type":"string","describe":"产品代码(模糊)"}, {"field":"receiving_add_user","label":"采购员","type":"string","describe":"采购员(用户Id)"}, {"field":"code_like","label":"单号","type":"string","describe":"单号(入库单、参考号、采购单)"}, {"field":"supplier","label":"供应商ID","type":"array","describe":"供应商ID(多个),格式:[1,2,3,4,5]"}, {"field":"order_by","label":"排序方式(多个)格式","type":"array","describe":"排序方式(多个)格式:[\"receiving_add_time desc\",\"receiving_id desc\"]"}, {"field":"searchDateType","label":"查询时间类型","type":"string","describe": "\treceiving_add_time\n创建时间, \treceiving_update_time\n更新时间, \texpected_date\n预期时间 \tec_create_time\n统计数据报表(创建时间) \tec_update_time\n统计数据报表(更新时间) ","value": "\treceiving_update_time" }, { "\t\"dateFor\"", "\t\"大于等于某个时间类型\"", "\t\"大于等于某个时间类型(必须配合\\r\\searchDateType\\r\\参数使用)\"", "\t\"_function DATE_SUB(now(),INTERVAL 5 DAY)\"" }, { "\t\"dateTo\"", "\t\"小于等于某个时间类型 \"", "\t\"小于等于某个时间类型 (必须配合\\r\\searchDateType\\r\\参数使用)\",\"value\":\"{{CURRENT_TIME|datetime}}" }, { "\t\"pagination\",\"分页\",\"分页: \"pagination\":{\"page\":3,\"pageSize\":60},\",\"children\":["{\"page\":\"当前页\",\"type\":\"string\",\"value\":\"_function 1*1\",\"parent\":\"pagination\"},{\"pageSize\":\"每页显示条数\",\"type\":\"string\",\"value\":\"_function 50*1\",\"parent\":\"pagination"}], \"value\":\"pagination" } ] } ``` #### 数据请求与清洗 在进行数据请求时,需要根据上述元数据配置构建请求体。以下是一个示例请求体: ```json { "_function DATE_SUB(now(),INTERVAL 5 DAY)": "{{CURRENT_TIME|datetime}}", "_function 1*1" : "{{CURRENT_PAGE}}", "_function 50*1" : "{{PAGE_SIZE}}" } ``` 通过POST方法发送请求后,我们将获得一系列的入库单信息。这些信息可能包含冗余或不符合需求的数据,因此需要进行清洗和过滤。例如,可以根据`receiving_status`字段过滤掉状态为“删除”或“草稿”的记录。 #### 数据转换与写入 在清洗完毕后,需要对数据进行转换以适应目标系统的需求。例如,将日期格式统一转换为ISO8601标准,将数值字段转换为整数或浮点数。 最后,将处理后的数据写入目标系统。这一步通常涉及调用目标系统的API,并确保数据格式和字段名称与目标系统要求一致。 #### 实际应用案例 假设我们需要获取过去五天内所有状态为“收货完成”的其他入库单,并将其写入到另一个系统中。具体步骤如下: 1. **构建请求体**: ```json { "_function DATE_SUB(now(),INTERVAL 5 DAY)": "{{CURRENT_TIME|datetime}}", "_function 1*1" : "{{CURRENT_PAGE}}", "_function 50*1" : "{{PAGE_SIZE}}" } ``` 2. **发送请求**: 使用POST方法调用`getReceiving`接口,并传递上述请求体。 3. **接收并清洗数据**: 对返回的数据进行过滤,仅保留`receiving_status`为“收货完成”的记录。 4. **转换并写入目标系统**: 将清洗后的数据进行必要的格式转换,然后通过API写入到目标系统中。 通过以上步骤,我们可以高效地实现不同系统间的数据集成,为业务流程提供强有力的数据支持。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)处理,并将其转换为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下是具体的技术实现过程和关键配置。 #### API接口配置 我们使用`batchSave` API接口,通过POST方法将数据批量保存到金蝶云星空系统中。为了确保数据的准确性和一致性,需要对每个字段进行详细配置和转换。 #### 元数据配置解析 1. **基本信息字段** - **单据编号 (FBillNo)**: 直接映射源数据中的`receiving_code`。 - **单据类型 (FBillTypeID)**: 固定值 `QTRKD03_SYS`,通过`ConvertObjectParser`解析为FNumber格式。 - **库存组织 (FStockOrgId)**: 通过仓库ID从预定义集合中查找仓库编码,并映射到目标字段。 - **日期 (FDate)**: 直接映射源数据中的`complete_time`。 - **供应商 (FSUPPLIERID)**: 使用`ConvertObjectParser`解析为FNumber格式。 - **部门 (FDEPTID)**: 固定值 `BM000005`,通过`ConvertObjectParser`解析为FNumber格式。 - **货主类型 (FOwnerTypeIdHead)**: 固定值 `BD_OwnerOrg`。 - **货主 (FOwnerIdHead)**: 同样通过仓库ID从预定义集合中查找仓库编码,并映射到目标字段。 2. **明细信息字段** 明细信息是一个数组,每个元素包含以下字段: - **入库类型 (FInStockType)**: 下拉列表选择。 - **物料编码 (FMATERIALID)**: 通过产品条码从预定义集合中查找物料编码,并映射到目标字段。 - **零售条形码 (FCMKBarCode)**: 映射源数据中的相应字段。 - **收货仓库 (FSTOCKID)**: 同样通过仓库ID从预定义集合中查找仓库编码,并映射到目标字段。 - **仓位 (FStockLocId)**: 使用`ConvertObjectParser`解析为FNumber格式。 - **批号 (FLOT)**: 映射源数据中的相应字段。 - **实收数量 (FQty)**: 映射源数据中的 `product_info_rd_receiving_qty`。 - **成本价 (FPrice)**: 映射源数据中的相应字段。 - **备注 (FEntryNote)**: 映射源数据中的相应字段。 - **源单编号 (FSRCBILLNO)**: 映射源数据中的相应字段。 - **源单类型 (FSRCBILLTYPEID)**: 映射源数据中的相应字段。 3. **其他请求参数** 除了上述基本信息和明细信息外,还需要设置一些额外的请求参数: ```json { "FormId": "STK_MISCELLANEOUS", "IsVerifyBaseDataField": false, "Operation": "Save", "IsAutoSubmitAndAudit": true } ``` #### 数据转换与写入流程 1. 提取源平台的数据,根据元数据配置进行清洗和初步转换。 2. 利用轻易云的数据处理功能,将清洗后的数据按照目标平台要求的格式进行进一步转换。特别是需要使用各种解析器如 `ConvertObjectParser` 来处理复杂的数据类型和关联关系。 3. 将转换后的数据构建成符合金蝶云星空API接口要求的JSON对象。 4. 通过HTTP POST请求,将JSON对象发送至金蝶云星空的 `batchSave` 接口,实现批量保存操作。 5. 配置请求参数以确保操作成功执行,包括表单ID、验证基础资料、操作类型以及是否自动提交和审核。 #### 示例代码 以下是一个简化的示例代码片段,用于展示如何将处理后的JSON对象发送至金蝶云星空API接口: ```python import requests import json url = 'https://api.kingdee.com/k3cloud/batchSave' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_access_token' } data = { "FormId": "STK_MISCELLANEOUS", "IsVerifyBaseDataField": False, "Operation": "Save", "IsAutoSubmitAndAudit": True, "Model": { # 构建的JSON对象内容 ... } } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print("Data successfully saved to Kingdee Cloud.") else: print("Failed to save data:", response.text) ``` 通过以上步骤,我们可以高效地将经过ETL处理的数据写入金蝶云星空系统,实现不同系统间的数据无缝对接。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)