使用轻易云平台进行ETL转换并写入金蝶云星空的实战指南

  • 轻易云集成顾问-贺强
### 聚水潭调拨单集成到金蝶云星空的技术解决方案 在本案例中,我们将详细探讨如何通过轻易云数据集成平台,实现场景中的聚水潭调拨单高效、无缝地集成至金蝶云星空分布式调出单。该流程不仅涉及API接口调用,还包括数据转换和异常处理等关键步骤。 首先,为了确保任务的顺利执行及信息实时性,我们利用定时可靠的抓取机制,通过聚水潭提供的`/open/allocate/query` API接口定期拉取最新的数据。这些数据将在进入轻易云平台后,由其强大的数据质量监控系统进行初步检查,以筛选掉不符合标准或存在问题的数据记录。 针对从聚水潭获取的大量数据,需要考虑如何快速写入金蝶云星空系统。为此,我们采用了批量写入策略,通过调用金蝶`s batchSave API,大大提升了吞吐量和整体效率。此外,借助自定义的数据转换逻辑模块,使得不同系统间的数据能正确映射并适应各自独特的数据结构要求。例如,在处理字段命名规则、数值格式差异时,这一功能表现尤为突出。 但这些还只是表面工作,真正复杂的部分在于分页与限流问题。在设计过程中,为避免由于请求频率过高导致API限流错误,我们引入了一套智能分页查询机制,并结合错误重试策略来保障稳定性。当一个分页请求未成功返回预期结果时,重试机制会重新发起该请求直至成功,这样有效减少漏单风险,提高对接准确性。同时,当识别到可能的性能瓶颈处,则依据监控告警反馈及时调整抓取频率或优化查询条件。 最后是日志记录与异常处理部分,每一次对接操作都会被详细记录下来,包括所有关键事件和异常情况。一旦定位到具体的问题点,即可迅速采取措施修正,从而保持整个流程透明、高效且持久稳定运行。 本文仅概述主要技术点,具体实现细节及代码示例将在以下章节逐步展开。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口/open/allocate/query获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过调用聚水潭的`/open/allocate/query`接口获取调拨单数据,并进行初步加工处理。 #### 接口配置与请求参数 首先,我们需要了解聚水潭接口的基本配置和请求参数。根据提供的元数据配置,以下是具体的接口信息: - **API路径**: `/open/allocate/query` - **请求方法**: `POST` - **作用**: 查询调拨单 - **主要字段**: - `io_id`: 调拨单号 - `name`: 调拨单名称 - `modified_begin`: 修改起始时间 - `modified_end`: 修改结束时间 - `page_index`: 第几页 - `page_size`: 每页多少条(默认30,最大50) - `type`: 调拨类型(固定值为“调拨出”) #### 请求参数设置 在实际操作中,请求参数需要动态生成,以确保数据的实时性和准确性。以下是具体的请求参数设置: ```json { "modified_begin": "{{LAST_SYNC_TIME|datetime}}", "modified_end": "{{CURRENT_TIME|datetime}}", "page_index": "1", "page_size": "30", "type": "调拨出" } ``` - `modified_begin` 和 `modified_end` 分别表示查询时间范围的起始和结束时间,这两个参数使用模板变量来动态生成。 - `page_index` 和 `page_size` 用于分页查询,确保每次请求的数据量适中。 - `type` 固定为“调拨出”,表示只查询调拨出的记录。 #### 数据请求与清洗 在发送请求后,系统会返回包含调拨单信息的数据集。此时,需要对返回的数据进行初步清洗和加工,以便后续处理。以下是一个典型的数据清洗步骤: 1. **解析响应数据**:将返回的JSON格式数据解析为可操作的数据结构。 2. **过滤无效记录**:检查每条记录是否包含必要字段,如`io_id`和`name`,并过滤掉不完整或无效的记录。 3. **字段映射与转换**:根据目标系统(如金蝶)的要求,对字段进行重命名或类型转换。例如,将日期格式转换为目标系统支持的格式。 示例代码如下: ```python import requests import json # 定义请求头和URL url = "https://api.jushuitan.com/open/allocate/query" headers = { 'Content-Type': 'application/json' } # 动态生成请求参数 params = { "modified_begin": get_last_sync_time(), # 获取上次同步时间 "modified_end": get_current_time(), # 获取当前时间 "page_index": "1", "page_size": "30", "type": "调拨出" } # 发送POST请求获取数据 response = requests.post(url, headers=headers, data=json.dumps(params)) data = response.json() # 数据清洗与加工 cleaned_data = [] for record in data.get('records', []): if 'io_id' in record and 'name' in record: cleaned_record = { 'order_number': record['io_id'], 'order_name': record['name'], 'modify_time': convert_date_format(record['modified_time']) } cleaned_data.append(cleaned_record) # 输出清洗后的数据 print(cleaned_data) ``` #### 自动填充响应 轻易云平台提供了自动填充响应功能(autoFillResponse),可以简化数据处理过程。在启用该功能后,平台会自动将API响应中的字段映射到预定义的数据结构中,从而减少手动编码工作量。 #### 总结 通过调用聚水潭的`/open/allocate/query`接口,我们能够高效地获取调拨单数据,并进行初步清洗和加工。这一步骤不仅确保了数据的准确性和完整性,还为后续的数据转换与写入奠定了坚实基础。在实际应用中,可以根据业务需求进一步优化和扩展这些操作,以实现更复杂的数据集成任务。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台能够接收的格式,并最终写入目标平台。在本案例中,我们将详细探讨如何将聚水潭调拨单的数据通过ETL转换后,写入到金蝶云星空的API接口中。 #### 配置元数据 在配置元数据时,我们需要关注以下几个关键字段和配置: 1. **API接口信息**: ```json {"api":"batchSave","effect":"EXECUTE","method":"POST","idCheck":true} ``` 这里指定了我们要调用的API接口为`batchSave`,请求方法为`POST`,并且启用了ID检查。 2. **请求参数配置**: 请求参数配置决定了如何将源数据映射到目标API所需的字段格式。以下是一些关键字段的配置示例: - **单据编号**: ```json {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{io_id}"} ``` 这里直接将源数据中的`io_id`映射为金蝶云星空中的`FBillNo`。 - **调出库存组织**: ```json {"field":"FStockOrgID","label":"调出库存组织","type":"string","describe":"调出库存组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function CASE '{lock_wh_id}' WHEN '' THEN '115' ELSE '{lock_wh_id}' END"} ``` 这里使用了一个条件判断,将`lock_wh_id`为空时默认设置为`115`,否则使用实际值。同时使用了`ConvertObjectParser`解析器来转换字段格式。 - **日期**: ```json {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{io_date}"} ``` 直接将源数据中的日期字段映射到目标字段。 - **明细信息**: ```json {"field":"FSTKTRSOUTENTRY","label":"明细信息","type":"array","describe":"明细信息","value":"items"} ``` 明细信息是一个数组类型,需要进一步配置其子字段,例如物料编码、数量等。 3. **子字段配置**: 在明细信息中,每个子字段也需要进行详细配置,例如: - **物料编码**: ```json {"field":"FMaterialID","label":"物料编码","type":"string","describe":"物料编码","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{items.sku_id}}"} ``` 将源数据中的SKU ID映射为目标系统中的物料编码,同时使用解析器进行格式转换。 - **数量**: ```json {"field":"FQty","label":"数量","type":"float","describe":"数量","value":"{{items.qty}}"} ``` 直接映射数量字段,无需额外处理。 4. **其他必要参数**: 除了上述主要字段,还需要配置一些其他必要参数以确保请求成功,例如表单ID、操作类型等: ```json [{"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"STK_TRANSFEROUT"}, {"field":"Operation","label":"执行的操作","type": "string", "describe": "执行的操作", "value": "BatchSave"}, {"field": "IsAutoSubmitAndAudit", "label": "提交并审核", "type": "bool", "describe": "提交并审核", "value": "true"}, {"field": "IsVerifyBaseDataField", "label": "验证基础资料", "type": "bool", "describe": "是否验证所有的基础资料有效性,布尔类,默认false(非必录)", "value": "true"}] ``` #### 数据处理逻辑 在实际的数据处理过程中,需要遵循以下步骤: 1. **提取数据**:从聚水潭系统中提取调拨单的数据。 2. **转换数据**:根据上述元数据配置,将提取的数据进行相应的格式转换和映射。 3. **加载数据**:调用金蝶云星空的API接口,将转换后的数据写入目标系统。 通过这些步骤,可以实现不同系统间的数据无缝对接,提高业务效率和透明度。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)