使用轻易云平台实现数据ETL转换到金蝶云星空

  • 轻易云集成顾问-胡秀丛
### 简道云数据集成到金蝶云星空的高效方案分享 在构建企业信息系统时,确保各系统间的数据无缝对接至关重要。本文将聚焦于一个实际操作案例——将简道云中的其他出库单数据集成到金蝶云星空,实现高效、精准的数据同步。 首先,我们选择使用简道云提供的API接口`/api/v2/app/{app_id}/entry/{entry_id}/data`来抓取源数据。为保障数据不漏单,我们通过定时任务设定可靠的抓取频率,每隔固定时间从简道云拉取最新的数据,并实时监控接口调用过程中的日志记录,以便及时发现和处理异常情况。 获取到源数据后,下一步是处理分页和限流问题。在实现过程中,我们对简道云返回的大量分页数据进行逐页读取,同时设置合适的限流阈值以避免因过多请求导致服务端压力过大或触发防火墙限制。 随后,对于不同格式的数据,需进行标准化处理。在两套系统之间,由于字段定义和结构可能存在差异,通过编写自定义脚本或配置转换规则,将简单清晰的来源格式转化为符合金蝶云星空要求的目标格式。这一环节中使用了轻易云平台内置的数据映射工具,提高了开发效率,也减少了人为错误。 最后,通过调用金蝶云星空API `batchSave` 实现批量写入操作,大幅度提高了整体传输速度与稳定性。在此过程中,为应对可能发生的数据写入失败等异常情况,建立了健全的错误重试机制,使得任何失败操作都能在合理范围内自动重试并记录在案。 以上即是本文开篇部分,希望可以给大家一个初步了解我们如何通过详细且有序的方法,实现简道云其他出库单与金蝶-其他出库单之间的快速、高效、安全的数据集成。如需更深入探讨,请继续阅读以下内容... ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D18.png~tplv-syqr462i7n-qeasy.image) ### 调用简道云接口获取并加工数据的技术实现 在轻易云数据集成平台中,调用源系统接口是数据集成生命周期的第一步。本文将深入探讨如何通过调用简道云接口`/api/v2/app/{app_id}/entry/{entry_id}/data`来获取并加工数据。 #### 接口配置与请求参数 首先,我们需要了解该接口的元数据配置: ```json { "api": "/api/v2/app/{app_id}/entry/{entry_id}/data", "effect": "QUERY", "method": "POST", "number": "_widget_1689140117269", "id": "_id", "idCheck": true, "request": [ {"field":"appId","label":"应用ID","type":"string","describe":"应用ID","value":"642307c010703500087839ac"}, {"field":"entryId","label":"表单ID","type":"string","describe":"表单ID","value":"64a7b2586ac08a0007acafaa"}, {"field":"fields","label":"需要查询的字段","type":"string","describe":"多个字段以逗号隔开,默认不传入则输出所有字段","parser":{"name":"StringToArray","params":","}}, {"field":"limit","label":"每页返回数量","type":"string","describe":"查询的数据条数,1~100,默认10","value":"100"}, {"field":"filter","label":"过滤参数","type":"object","describe":"过滤参数","children":[ {"field":"rel","label":"过滤参数逻辑","type":"string","describe":"'rel': 'and', // 或者 'or' ","value":"and"}, {"field":"cond_1","label":"自定义字段过滤","type":"object","describe":"自定义字段过滤", "children":[ {"field":"field", "label": "过滤字段", "type": "string", "describe": "过滤字段", "value": "updateTime"}, {"field": "method", "label": "过滤方法", "type": "string", "describe": "'not_empty'(不为空), 'empty'(为空), 'eq'(等于), 'in'(等于任意一个), 'range'(在x与y之间,并且包含x和y本身), 'nin'(不等于任意一个), 'ne'(不等于), 'like'(文本包含)", "value": "range"}, {"field": "value", "label": "过滤值", "type": "string", "describe": "'{{LAST_SYNC_TIME|datetime}}'", "parser":{"name":"StringToArray", "params": ","}, } ]}, {"field": "cond_2", "label": "", "type": "", children: [ {"field": "", label: "", type: "", value: ""}, ... ]} ]} ], ... } ``` #### 请求示例 根据元数据配置,我们可以构建一个请求示例: ```json { "appId": "{app_id}", "entryId": "{entry_id}", ... } ``` 在实际操作中,我们需要替换`{app_id}`和`{entry_id}`为具体的应用ID和表单ID,例如: ```json { ... } ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换。以下是一些常见的数据清洗操作: 1. **去除空值**:确保所有必要字段都有值。 2. **格式转换**:将日期、时间等字段转换为标准格式。 3. **数据筛选**:根据业务需求筛选出符合条件的数据。 例如,如果我们需要筛选出更新时间在某个范围内的数据,可以使用如下代码: ```python def filter_data(data, last_sync_time): filtered_data = [] for record in data: if record['updateTime'] >= last_sync_time: filtered_data.append(record) return filtered_data ``` #### 数据写入 经过清洗和转换后的数据,需要写入目标系统。在轻易云平台中,这一步通常涉及调用目标系统的API接口。例如,将清洗后的数据写入金蝶系统: ```python def write_to_kd(data): url = "<金蝶系统API>" headers = { 'Content-Type': 'application/json', ... } response = requests.post(url, headers=headers, json=data) return response.status_code == 200 ``` 通过上述步骤,我们完成了从简道云获取数据、进行清洗与转换,并最终写入金蝶系统的全过程。这一过程不仅提高了数据处理的效率,还确保了数据的一致性和准确性。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,以便将其转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台实现这一过程。 #### 数据请求与清洗 首先,我们需要从源平台(例如简道云)提取数据。假设我们已经完成了这一阶段,并且得到了需要处理的数据。接下来,我们进入数据转换与写入阶段。 #### 数据转换 在数据转换过程中,我们需要将源数据字段映射到目标平台所需的字段,并进行必要的格式转换。以下是元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{_widget_1689140117269}" }, { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "...", ... }, ... ], ... } ``` 在这个配置中,每个字段都有明确的映射关系和转换规则。例如,`FBillNo` 字段直接从 `_widget_1689140117269` 获取值,而 `FBillTypeID` 字段则根据条件进行转换。 具体来说,`FBillTypeID` 字段的值通过一个 `CASE` 语句进行解析: ```json { "field": "FBillTypeID", ... "value": "_function CASE '{_widget_1684312625901}' WHEN '赠送' THEN 'QTCKD13_SYS' WHEN '试戴出库' THEN 'QTCKD16_SYS' when '盘库' then 'QTCKD15_SYS' ELSE '' END" } ``` 这段代码表示,如果 `_widget_1684312625901` 的值为“赠送”,则 `FBillTypeID` 的值为 `QTCKD13_SYS`;如果为“试戴出库”,则为 `QTCKD16_SYS`;以此类推。 #### 数据写入 完成数据转换后,我们需要将处理好的数据通过API接口写入到金蝶云星空系统中。根据元数据配置中的 `api`, `method`, 和 `otherRequest` 字段,我们可以确定请求的具体参数和操作方式: ```json { ... "operation": { ... "method": "batchArraySave" }, ... } ``` 这里使用了 `batchArraySave` 方法来批量保存数据。此外,其他请求参数如 `FormId`, `IsAutoSubmitAndAudit`, 和 `Operation` 等也需要一并发送: ```json { ... "otherRequest": [ { "field": "FormId", ... "value": "STK_MisDelivery" }, { ... "value": true }, ... ] } ``` 这些参数确保了我们在提交数据时能够满足金蝶云星空API的要求,例如表单ID(FormId)必须填写正确,以及是否自动提交并审核(IsAutoSubmitAndAudit)。 #### 实际操作步骤 1. **配置API请求**:根据元数据配置文件,设置API请求地址、方法和必要的头信息。 2. **构建请求体**:按照配置文件中的字段映射关系和转换规则,构建符合目标平台要求的数据结构。 3. **发送请求**:通过HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。 4. **处理响应**:接收并处理API响应,根据返回结果判断操作是否成功,并进行相应的错误处理或日志记录。 通过以上步骤,我们可以实现从简道云到金蝶云星空的数据无缝对接,并确保每个环节的数据准确性和完整性。这种全生命周期管理不仅提高了业务透明度和效率,还极大地简化了复杂系统间的数据集成过程。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)