轻易云平台ETL实践:转换与写入金蝶云星空

  • 轻易云集成顾问-蔡威
### 易快报数据集成到金蝶云星空:获取业务对象实例供应商列表 在本案例中,我们将深入探讨如何通过易快报的开放API接口`/api/openapi/v2/datalink`,实现其与金蝶云星空系统的数据对接,并成功获取供应商列表。这一过程不仅涉及了高效的数据抓取和转换,还需要处理分页、限流以及异常重试等具体问题。 为了确保大规模数据的实时集成,我们利用了高吞吐量的数据写入能力,使大量的数据能快速地从易快报系统导入到金蝶云星空。同时,通过集中监控和告警系统,实现对数据集成任务的状态及性能进行实时跟踪,从而保障了整个操作流程的透明度和可靠性。此外,在集成过程中,自定义数据转换逻辑帮助我们顺利应对两套系统间存在的数据格式差异。 宽泛来讲,本项目所需解决的一系列技术挑战包括: 1. **定时可靠的抓取接口数据**:为了保证及时且不漏单地获取最新业务对象实例供应商列表,采用了一种定时触发机制。 2. **批量写入数据**:针对海量供应商信息,借助于金蝶云星空提供的`batchSave` API,可以实现高效批量写入,而不是逐条发送,提高效率并减少网络开销。 3. **分页与限流处理**:由于API调用往往会受到分页及频率限制,需要设计合理策略以分段拉取数据,同时避免超过接口请求频次上限,引发异常。 4. **异常处理及错误重试机制**:每当出现网络波动或其他导致调用失败的问题时,通过预设好的重试机制,确保不会因暂时故障影响整体流程。 5. **可视化操作与管理**:使用便捷直观的平台工具,对整个数据流设计进行了严密规划和可视化展示,以简化日常管理工作。 接下来,将详述每个步骤中的技术细节,并分享实战经验。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/D26.png~tplv-syqr462i7n-qeasy.image) ### 调用易快报接口获取并加工数据的技术案例 在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何使用轻易云数据集成平台调用易快报的`/api/openapi/v2/datalink`接口获取业务对象实例供应商列表,并对数据进行初步加工。 #### 接口配置与调用 首先,我们需要根据元数据配置来设置API调用参数。以下是元数据配置的详细内容: ```json { "api": "/api/openapi/v2/datalink", "effect": "QUERY", "method": "GET", "number": "name", "id": "id", "otherRequest": [ {"field":"entityId","label":"业务对象ID","type":"string","value":"f410286f034d32e9cbc0"}, {"field":"start","label":"数据开始数","type":"string"}, {"field":"count","label":"每页总数","type":"string","value":"100"}, {"field":"startDate","label":"查询开始时间","type":"string","describe":"按业务对象实例 更新时间 查询,格式:yyyy-MM-dd HH:mm:ss","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endDate","label":"查询结束时间","type":"string","describe":"按业务对象实例 更新时间 查询,格式:yyyy-MM-dd HH:mm:ss","value":"{{CURRENT_TIME|datetime}}"} ], "autoFillResponse": true } ``` #### 参数解析与设置 1. **API路径**:`/api/openapi/v2/datalink` - 此路径用于访问易快报的数据接口。 2. **请求方式**:`GET` - 使用HTTP GET方法请求数据。 3. **主要字段**: - `number`: 用于标识业务对象实例名称。 - `id`: 用于标识业务对象实例ID。 4. **其他请求参数**: - `entityId`: 固定值为`f410286f034d32e9cbc0`,表示特定的业务对象ID。 - `start`: 数据开始数,用于分页。 - `count`: 每页总数,固定为100条。 - `startDate`: 查询开始时间,动态值由上次同步时间提供。 - `endDate`: 查询结束时间,动态值为当前时间。 #### 数据请求与清洗 在轻易云平台中,我们可以通过配置上述参数来发起对易快报API的请求。以下是一个示例代码片段,用于演示如何在实际操作中实现这一过程: ```python import requests from datetime import datetime # 设置动态参数 last_sync_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 示例上次同步时间 current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 当前时间 # 构建请求URL和参数 url = 'https://your-domain.com/api/openapi/v2/datalink' params = { 'entityId': 'f410286f034d32e9cbc0', 'start': '0', 'count': '100', 'startDate': last_sync_time, 'endDate': current_time } # 发起GET请求 response = requests.get(url, params=params) # 检查响应状态码并处理数据 if response.status_code == 200: data = response.json() # 对返回的数据进行初步清洗和处理 processed_data = [] for item in data['items']: processed_item = { 'id': item['id'], 'name': item['name'], # 可以添加更多字段处理逻辑 } processed_data.append(processed_item) else: print(f"Error: {response.status_code}") # 输出处理后的数据 print(processed_data) ``` #### 数据转换与写入 在获取并清洗了原始数据后,可以将其转换为目标系统所需的格式,并写入到目标数据库或系统中。这一步通常包括字段映射、格式转换等操作。在轻易云平台中,这些操作可以通过可视化界面进行配置,无需编写复杂代码。 #### 实时监控与调试 轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。如果在调用API或处理数据时遇到问题,可以通过平台提供的日志和调试工具快速定位并解决问题。 综上所述,通过合理配置API调用参数,并利用轻易云平台强大的可视化和监控功能,我们可以高效地实现对异构系统间的数据集成。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成过程中,ETL(提取、转换、加载)是关键的一步。本文将重点探讨如何使用轻易云数据集成平台,将源平台的数据进行ETL转换,最终写入金蝶云星空API接口。 #### 1. 数据请求与清洗 在数据集成的生命周期中,首先需要从源平台获取业务对象实例供应商列表。假设我们已经完成了这一步,并且获得了所需的原始数据。接下来,我们将进入本文的重点:将这些数据转换为金蝶云星空API接口所能接收的格式,并写入目标平台。 #### 2. 数据转换与写入 我们使用轻易云提供的元数据配置来完成这一过程。以下是具体的配置和技术细节: ##### 2.1 配置目标API接口 我们使用金蝶云星空的`batchSave` API接口,该接口支持批量保存供应商信息。具体配置如下: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FSupplierId", "label": "供应商ID", "type": "string", "value": "_findCollection find FSupplierId from d3f65ab2-9f83-3ab3-9e98-96a40b139cba where FNumber={E_f410286f034d32e9cbc0_code}" }, { "field": "FCreateOrgId", "label": "FCreateOrgId", "type": "string", "describe": "111", "value": "102", "parser": { "name": "ConvertObjectParser", "params": "FNumber" } }, { ... } ], ... } ``` ##### 2.2 字段映射与转换 在上述配置中,每个字段都对应于金蝶云星空API接口中的一个参数。以下是几个关键字段及其转换逻辑: - **FSupplierId**: 通过 `_findCollection` 方法从源数据中查找并获取供应商ID。 - **FCreateOrgId** 和 **FUseOrgId**: 固定值 `102`,并使用 `ConvertObjectParser` 进行解析。 - **FNumber**: 使用 `{E_f410286f034d32e9cbc0_code}` 占位符直接从源数据中获取。 - **FName**: 转换为多语言格式,通过 `ConvertJson` 解析器处理。 ##### 2.3 特殊字段处理 某些字段需要特殊处理,例如: - **供应商分组 (FGroup)**: 根据条件进行分组映射。例如,根据 `{{E_f410286f034d32e9cbc0_国内外供应商}}` 的值判断属于哪个分组: ```json { "field": "FGroup", "label": "供应商分组", "type": "string", ... "value": "_function case '{{E_f410286f034d32e9cbc0_国内外供应商}}' when 'ID01oURUq8kkzl' then '01' when 'ID01oURTCg37wb' then '02' else '' end" } ``` - **银行信息 (FBankInfo)**: 包含多个子字段,如银行账号、账户名称和开户银行。这些子字段通过数组形式嵌套在主字段中: ```json { ... { "field": "FBankInfo", ... "children": [ { ... { ... {"field":"FBankCode","label":"银行账号","type":"string","value":"{{E_f410286f034d32e9cbc0_开户支行}}"}, {"field":"FBankHolder","label":"账户名称","type":"string","value":"{{E_f410286f034d32e9cbc0_Beneficary}}"}, {"field":"FOpenBankName","label":"开户银行","type":"string","value":"{{E_f410286f034d32e9cbc0_BankName}}"} } } ] } } ``` ##### 2.4 操作设置 最后,我们需要设置操作参数以确保数据正确写入目标平台: ```json { ... { ... {"field":"FormId","label":"FormId","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_Supplier"}, {"field":"Operation","label":"Operation","type":"string","describe":"111","value":"batchSave"}, {"field":"IsVerifyBaseDataField","label":"IsVerifyBaseDataField","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"}, {"field":"IsAutoSubmitAndAudit","label":"IsAutoSubmitAndAudit","type":"bool","value":"_function CASE WHEN '_findCollection find FSupplierId from d3f65ab2-9f83-3ab3-9e98-96a40b139cba where FNumber={{_system.code}} _endFind'>0 THEN 'false' ELSE 'true' END"} }, ... } ``` 通过上述配置,我们可以实现从源平台到金蝶云星空API接口的数据无缝对接。每个字段都经过精确映射和转换,以确保数据格式和内容符合目标系统要求。 #### 总结 本文详细介绍了如何使用轻易云数据集成平台,将已获取的源平台数据进行ETL转换,并通过金蝶云星空API接口实现批量保存。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)