使用轻易云进行数据ETL转换及写入金蝶云星空的技术探讨

  • 轻易云集成顾问-潘裕
### 钉钉数据集成到金蝶云星空:案例分享与实现方法 在企业信息系统的对接过程中,如何高效且准确地将业务数据从钉钉平台集成到金蝶云星空,是许多企业关注的重点。本篇文章介绍了一个实际运行方案“传给钉钉后,回传金蝶字段②”的技术细节,通过轻易云数据集成平台,实现了这一复杂任务。 在这个案例中,我们主要通过调用两个核心API接口来完成整个流程:使用`topapi/processinstance/get`从钉钉获取流程实例数据,并采用`batchSave`接口将处理后的数据批量写入到金蝶云星空。以下是具体操作步骤和技术要点。 首先,为确保不会遗漏任何重要业务信息,我们需要定时可靠地抓取钉钉提供的数据。利用轻易云的数据调度功能,可以设置定期任务来调用`topapi/processinstance/get`接口,从而实时监控和记录每一次的数据抓取过程。不仅如此,该方案还内置了错误重试机制,即使出现网络波动或其他异常情况,也能保证数据采集的完整性。 其次,在处理大量数据快速写入金蝶云星空时,需要特别注意API接口的限流问题。针对大批量的数据提交,需分批次进行,以避免触发限流策略导致请求失败。在这里,我们采用分页拉取和并行处理相结合的方法,每次只获取一定数量的数据,通过先进先出的队列管理机制,将其依序导入到金蝶云星空中,大幅提升了整体效率。 另外,由于两者之间的数据格式差异较大,我们自定义了一套映射规则,对相关字段进行转换。例如,从钉丁获取的信息包括审批状态、审批人等,而这些信息可能以不同格式存储在金蝶云。因此,在执行 `batchSave` 操作之前,需要对这些字段进行预先转换。这一环节不仅保障了数据的一致性,还便于日后的维护升级。 最后,为应对不同种类异常情况,本案例设计了一整套完善的异常捕获与恢复机制。一旦发现某个任务执行失败或者返回错误码,可以自动进入重试阶段,同时会生成详细日志供开发人员分析。这一部分由轻易云透明化可视界面全程监控,不但有助于快速定位问题,还能及时做出响应调整。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成的生命周期中,调用源系统接口获取原始数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置调用钉钉接口的元数据。以下是具体的配置细节: ```json { "api": "topapi/processinstance/get", "method": "POST", "number": "id", "id": "id", "idCheck": true, "request": [ { "label": "审批流的唯一码", "field": "process_code", "type": "string", "value": "PROC-C1D46DC7-ACB2-4B63-8C48-F644942F63E5" }, { "label": "审批实例开始时间。Unix时间戳,单位毫秒。", "field": "start_time", "type": "string", "value": "_function ({LAST_SYNC_TIME}-(3600 * 24))* 1000" }, { "label": "审批实例结束时间,Unix时间戳,单位毫秒", "field": "end_time", "type": "string", "value": "{CURRENT_TIME}000" }, { "label": "分页参数,每页大小,最多传20。", "field": "size", "type": "string", "value": "20" }, { "label": "分页查询的游标,最开始传0,后续传返回参数中的next_cursor值。", "field": "cursor", "type": "string" } ] } ``` #### 参数解析与设置 1. **审批流的唯一码 (`process_code`)**: - 固定值为`PROC-C1D46DC7-ACB2-4B63-8C48-F644942F63E5`。 - 用于标识特定的审批流程。 2. **审批实例开始时间 (`start_time`)**: - 使用函数计算:`_function ({LAST_SYNC_TIME}-(3600 * 24))* 1000`。 - `LAST_SYNC_TIME`表示上次同步的时间,通过减去一天(3600秒 * 24小时)并转换为毫秒。 3. **审批实例结束时间 (`end_time`)**: - 当前时间转换为Unix时间戳,并乘以1000转换为毫秒:`{CURRENT_TIME}000`。 4. **分页参数 (`size`)**: - 每页大小固定为20条记录。 5. **分页查询游标 (`cursor`)**: - 初始值为0,在后续请求中使用返回参数中的`next_cursor`值。 #### 数据请求与清洗 在完成上述配置后,我们可以通过轻易云平台发起POST请求来获取钉钉的审批实例数据。以下是一个示例请求: ```json { "_url":"https://oapi.dingtalk.com/topapi/processinstance/get", "_method":"POST", "_headers":{ // 包含必要的认证信息 }, "_body":{ process_code: 'PROC-C1D46DC7-ACB2-4B63-8C48-F644942F63E5', start_time: (LAST_SYNC_TIME-(3600 * 24))*1000, end_time: CURRENT_TIME*1000, size: '20', cursor: '0' } } ``` 在接收到响应后,需要对数据进行初步清洗和处理。例如,将Unix时间戳转换为可读日期格式、过滤掉不需要的字段等。 #### 数据转换与写入 经过清洗后的数据将进入下一阶段的数据转换与写入过程。在这一阶段,可以根据业务需求将数据写入到目标系统,如金蝶等ERP系统。通过轻易云平台提供的多种异构系统支持,可以实现无缝的数据对接和高效的数据流转。 #### 实时监控与优化 在整个过程中,通过轻易云平台提供的实时监控功能,可以随时查看数据流动和处理状态。这不仅提高了业务透明度,还能及时发现和解决潜在问题,从而优化数据集成流程。 通过上述步骤,我们成功地使用轻易云数据集成平台调用了钉钉接口,并对获取的数据进行了初步加工。这一过程展示了如何高效地进行跨系统的数据集成,为后续的数据处理奠定了坚实基础。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成过程中,数据的ETL(提取、转换、加载)是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能够接收的格式,最终写入目标平台。 #### 数据请求与清洗 在数据请求与清洗阶段,我们已经从源系统中提取了原始数据,并对其进行了初步清洗和处理。接下来,我们将重点关注如何将这些数据转换为金蝶云星空API接口所需的格式,并通过API写入目标平台。 #### 元数据配置解析 我们使用以下元数据配置来指导ETL过程: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ { "field": "FID", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo={{单据编号}}" }, { "field": "F_VAOJ_TDD", "label": "是否同步钉钉", "type": "string", "describe": "单据类型", "value": "已同步" } ], "otherRequest": [ { "field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "CN_PAYAPPLY" }, { "field": "Operation", "label": "执行的操作", "type": "string", "value": ":BatchSave" }, { "field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"false"}, { field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"}, {"label":"NeedUpDateFields","field":"NeedUpDateFields","type":"string","value":"F_VAOJ_TDD","parser":{"name":"StringToArray","params":","}} ] } ``` #### 转换与写入 1. **字段映射与转换**: - `FID`:通过 `_findCollection` 方法从源系统中查找对应的 `FID`。 - `F_VAOJ_TDD`:设置为固定值“已同步”,表示该单据已经同步到钉钉。 2. **其他请求参数**: - `FormId`:指定业务对象表单ID,这里为 `CN_PAYAPPLY`。 - `Operation`:执行批量保存操作。 - `IsAutoSubmitAndAudit` 和 `IsVerifyBaseDataField`:分别设置为 `false`,表示不自动提交和审核,也不验证基础资料有效性。 - `NeedUpDateFields`:指定需要更新的字段,这里为 `F_VAOJ_TDD`。 #### API调用示例 通过配置好的元数据,我们可以构建出具体的API调用请求: ```json { "_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo={{单据编号}}" } ``` 假设我们从源系统获取到的数据如下: ```json { "_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo=12345" } ``` 然后我们将这些数据转换为金蝶云星空API所需格式: ```json { "_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo=12345" } ``` 最终,通过POST方法将这些数据发送到金蝶云星空API接口,实现数据写入: ```json { "_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo=12345" } ``` #### 实践应用中的注意事项 在实际应用中,需要特别注意以下几点: 1. **字段映射准确性**:确保所有字段都能正确映射到目标系统中的相应字段。 2. **数据格式一致性**:确保转换后的数据格式符合目标系统API接口要求。 3. **错误处理机制**:在调用API时,要有完善的错误处理机制,以便及时发现和解决问题。 通过以上步骤,我们成功实现了从源系统到金蝶云星空的ETL转换和数据写入。这不仅提高了数据处理效率,还确保了业务流程的一致性和准确性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)