金蝶云星空数据写入:轻易云ETL转换实战

  • 轻易云集成顾问-彭亮
### 案例分享:管易云数据集成到金蝶云星空 在系统对接和数据集成的项目中,我们面临着多样化平台间的数据同步挑战。本次我们重点分享的是如何通过轻易云平台实现管易云与金蝶云星空之间的数据无缝对接,具体方案命名为“wk_店铺_客户”。 首先,针对从管易云获取接口数据(API: gy.erp.shop.get),我们设计了一套定时可靠的抓取机制,以确保集成过程中不漏单、不丢失关键业务信息。该机制利用轻易云的实时监控和日志记录功能,保证每一次调用都可以追溯与验证。 其次,大量数据需快速写入到金蝶云星空(API: batchSave)。为了满足这一需求,我们采用了批量处理策略,并且在并发写入时制定了严格的数据校验规则。这一过程不仅考虑到了性能优化,还特别关注了两大系统间的数据格式差异,通过定制化映射配置进行有效转译。 此外,管易云接口调用过程中常见的分页和限流问题也被深入分析并解决。在处理这些细节上,我们设置了合理的分页参数及重试机制,以应对可能发生的网络波动或请求失败情况,从而保证整体流程稳定运行。 对于异常情况以及错误重试机制,我们建立了一套全面、有效的方法来监测和应对。任何一次失败操作都会触发相对应重试策略,同时生成详细错误日志供后续分析使用。这些细节保障了整个集成方案具有高度可靠性与可维护性。 以上是本次技术案例分享的一部分内容,会继续深入探讨更多关于如何确保高效、准确完成系统数据整合的重要方法。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用管易云接口gy.erp.shop.get获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用管易云接口`gy.erp.shop.get`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到以下关键参数: - **API**: `gy.erp.shop.get` - **Method**: `POST` - **Pagination**: 支持分页,每页大小为100 - **ID Check**: 启用ID检查 请求参数包括: - `modify_start_date`: 修改时间开始段 - `modify_end_date`: 修改时间结束段 - `code`: 店铺代码 其他请求参数包括: - `page_size`: 分页大小,默认为10 - `page_no`: 页号,默认1 #### 请求参数动态生成 在实际操作中,`modify_start_date`和`modify_end_date`需要动态生成。我们可以利用轻易云的数据处理功能,通过模板引擎来实现: ```json { "field": "modify_start_date", "label": "修改时间开始段", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "modify_end_date", "label": "修改时间结束段", "type": "string", "value": "{{CURRENT_TIME|datetime}}" } ``` 其中,`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`分别代表上次同步时间和当前时间,这样可以确保每次请求的数据都是最新的。 #### 分页处理 为了高效处理大量数据,我们需要利用分页功能。元数据配置中已经定义了分页参数: ```json { "field": "page_size", "label": "分页大小", "type": "string", "describe": "默认为10", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "page_no", "label": "页号", "type": "string", "describe": "默认1", "value": "{PAGINATION_START_PAGE}" } ``` 在实际调用时,我们可以设置每页大小为100,并逐页获取数据直到没有更多数据为止。 #### 数据清洗与转换 在获取到原始数据后,需要进行清洗与转换,以便后续的数据写入操作。常见的数据清洗操作包括: 1. **去除重复记录**:根据店铺代码(code)和ID(id)进行去重。 2. **字段映射与转换**:将源系统的字段映射到目标系统所需的字段格式。例如,将日期格式统一转换为ISO标准格式。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] seen_ids = set() for record in raw_data: if record['id'] not in seen_ids: seen_ids.add(record['id']) cleaned_record = { 'shop_code': record['code'], 'shop_name': record['name'], 'last_modified': convert_to_iso(record['modified_time']) } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 实时监控与日志记录 为了确保整个过程的透明度和可追溯性,实时监控和日志记录是必不可少的。轻易云平台提供了强大的监控工具,可以实时查看每个步骤的执行状态,并记录详细日志以供事后分析。 通过上述步骤,我们可以高效地调用管易云接口获取店铺信息,并进行必要的数据清洗与转换,为后续的数据写入做好准备。这不仅提升了业务透明度,也极大提高了数据处理效率。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将数据转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台配置元数据,实现这一过程。 #### 元数据配置解析 我们首先来看一下元数据配置,它定义了如何将源数据转换为目标系统所需的数据格式,并通过API接口写入金蝶云星空。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 20, "method": "batchArraySave" }, "request": [ {"field": "FName", "label": "客户名称", "type": "string", "value": "{name}"}, {"field": "FNumber", "label": "客户编码", "type": "string", "value": "{name}"}, {"field": "FCreateOrgId", "label": "创建组织", "type": "string", "parser": {"name":"ConvertObjectParser","params":"FNumber"}}, {"field": "FUseOrgId", "label": "使用组织", "type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FDescription","label":"描述","type":"string"} ], "otherRequest":[ {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_Customer"}, {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"} ] } ``` #### 数据请求与清洗 在这个阶段,我们需要确保源数据符合目标系统要求。元数据配置中的`request`字段定义了每个请求参数及其对应的映射关系。例如: - `FName` 和 `FNumber` 都映射到 `{name}`,这意味着源数据中的 `name` 字段会被转换为金蝶云星空中的客户名称和客户编码。 - `FCreateOrgId` 和 `FUseOrgId` 使用了 `ConvertObjectParser`,该解析器将特定字段值转换为目标系统所需格式。 #### 数据转换与写入 接下来,我们使用轻易云的数据转换功能,将清洗后的数据按照元数据配置进行转换,并通过API接口写入金蝶云星空。 1. **批量保存操作**:我们使用 `batchSave` API,通过 POST 方法提交请求。元数据中指定了 `operation` 字段,其中 `rowsKey` 为数组类型,表示一次可以处理多行记录,每次处理20行。 2. **字段映射与解析**:每个字段都有明确的映射关系和解析器。例如,创建组织和使用组织字段都使用了 `ConvertObjectParser` 来确保值符合金蝶云星空的要求。 3. **其他请求参数**:包括表单ID (`FormId`) 和操作类型 (`Operation`) 等,这些参数确保了请求能够被正确识别和处理。此外,设置了自动提交并审核 (`IsAutoSubmitAndAudit`) 和验证基础资料 (`IsVerifyBaseDataField`) 的选项,以满足业务需求。 #### 实际应用案例 假设我们有一组源平台的数据如下: ```json [ {"name": "客户A", "description": ""}, {"name": "客户B", "description": ""} ] ``` 根据元数据配置,这些数据会被转换为如下格式: ```json { array: [ { FName: '客户A', FNumber: '客户A', FCreateOrgId: { FNumber: '100' }, FUseOrgId: { FNumber: '100' }, FDescription: '' }, { FName: '客户B', FNumber: '客户B', FCreateOrgId: { FNumber: '100' }, FUseOrgId: { FNumber: '100' }, FDescription: '' } ], FormId: 'BD_Customer', Operation: 'BatchSave', IsAutoSubmitAndAudit: true, IsVerifyBaseDataField: false } ``` 最终,这些转换后的数据通过调用金蝶云星空的 `batchSave` API 接口,实现批量保存。 #### 总结 本文详细介绍了如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并通过API接口写入到金蝶云星空。在实际操作中,通过合理配置元数据,可以高效地实现不同系统间的数据无缝对接,大大提升业务效率。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)