从钉钉到金蝶云的数据之旅:完整ETL实例解析

  • 轻易云集成顾问-彭亮
### 钉钉数据集成到金蝶云星空:exp-新报销单(实报实销)V4.0 实战案例 在日常业务运作中,企业面临着各类系统之间的数据孤岛问题。如何高效地将不同系统中的数据进行无缝对接和整合,成为了信息化建设中的一大挑战。在本篇技术文章中,我们将直击技术核心,分享一个关于将钉钉平台上的审批流程数据集成到金蝶云星空财务系统的实际运行案例:exp-新报销单(实报实销)V4.0。 为确保能够实时、准确地获取和处理钉钉上产生的大量审批实例数据,本方案采用了`v1.0/yida/processes/instances` API接口,从而定时可靠地抓取所需数据信息。通过利用轻易云数据集成平台,在简化复杂操作的同时保证了高吞吐量的数据写入能力,使得多笔审批记录能够快速并行处理,并批量导入至金蝶云星空。 与此同时,本方案加强了对接过程中的监控与告警机制。集中监控与实时告警功能帮助我们及时掌握每个任务节点的状态及性能表现,有效避免因网络延迟或系统异常导致的一系列问题。此外,通过可自定义的数据转换逻辑,我们能更灵活地适应特定业务需求,对不同格式的数据进行必要转化,以匹配目标系统要求,为后续的数据分析奠定坚实基础。 值得注意的是,由于钉钉与金蝶云星空在API设计及调用方式方面存在显著差异,比如分页处理、速率限流等问题。因此,我们专门开发了一套错误重试机制,在面对意外中断或失败时自动重启任务,确保所有重要审批记录不会遗漏。同时,通过优化API调用效率,我们成功实现了大量数据信息从源头稳定、安全、快速输送至目的端——即金蝶云星空财务模块内,实现全面、精准的财务管理和统计功能。 下一节内容我们会详细介绍具体实施步骤以及相关代码示例,包括如何通过配置轻易云平台来完成从获取到转换再到写入整个流程链条。这些技术要点不仅有助于理解全局架构,同样为解决其他类似场景提供借鉴意义和参考价值。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口v1.0/yida/processes/instances获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统(钉钉)调用API接口`v1.0/yida/processes/instances`获取数据,并进行初步加工。以下是详细的技术实现过程。 #### 接口调用配置 首先,我们需要配置API调用的元数据。根据提供的metadata,以下是具体的配置参数: - **API路径**: `v1.0/yida/processes/instances` - **请求方法**: `POST` - **分页参数**: - `pageNumber`: 分页页码,初始值为`{PAGINATION_START_PAGE}` - `pageSize`: 分页大小,固定值为50 - **应用相关参数**: - `appType`: 应用ID,固定值为`APP_WTSCMZ1WOOHGIM5N28BQ` - `systemToken`: 应用秘钥,固定值为`IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4` - `userId`: 用户的userid,固定值为`16000443318138909` - **语言参数**: - `language`: 固定值为`zh_CN` - **表单相关参数**: - `formUuid`: 表单ID,固定值为`FORM-0IA66C71A4V9JSAX6MEV45W77QOO2WI78EHGLQ` - `searchFieldJson`: 根据表单内组件值查询 - `radioField_lgk9jn2v`: 类型,固定值为`实报实销` - `numberField_lgk9jn4n`: 报销金额,大于等于0.001 - **时间范围参数**: - `createFromTimeGMT`: 创建时间起始值,动态计算过去25天的日期 - `createToTimeGMT`: 创建时间终止值,当前时间 - **实例状态和审批结果**: - `instanceStatus`: 实例状态,固定值为`COMPLETED` - `approvedResult`: 流程审批结果,固定值为`agree` #### 数据请求与清洗 在进行数据请求时,需要确保请求体包含上述所有必要参数。以下是一个示例请求体: ```json { "pageNumber": "{PAGINATION_START_PAGE}", "pageSize": "50", "appType": "APP_WTSCMZ1WOOHGIM5N28BQ", "systemToken": "IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4", "userId": "16000443318138909", "language": "zh_CN", "formUuid": "FORM-0IA66C71A4V9JSAX6MEV45W77QOO2WI78EHGLQ", "searchFieldJson": { "radioField_lgk9jn2v": "实报实销", "numberField_lgk9jn4n": [0.001] }, "createFromTimeGMT": "_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 25 DAY),'%Y-%m-%d 00:00:00')", "createToTimeGMT": "{{CURRENT_TIME|datetime}}", "instanceStatus": "COMPLETED", "approvedResult": "agree" } ``` 通过上述请求,我们可以从钉钉系统中获取符合条件的数据实例。 #### 数据转换与写入 在获取到数据后,需要对数据进行初步清洗和转换,以便后续处理和存储。以下是一些关键步骤: 1. **字段映射与转换**: 将API返回的数据字段映射到目标系统所需的字段。例如,将返回的`processInstanceId`映射到目标系统中的唯一标识字段。 2. **数据过滤与验证**: 根据业务需求,对返回的数据进行过滤。例如,只保留那些实例状态为“COMPLETED”且审批结果为“agree”的记录。 3. **分页处理**: 如果返回的数据量较大,需要处理分页逻辑。通过递增分页页码(`pageNumber`)来逐页获取数据,直到没有更多数据返回。 4. **异常处理与日志记录**: 在整个过程中,需要对可能出现的异常情况进行处理,并记录日志以便后续排查问题。例如,如果API调用失败或返回错误信息,需要捕获并记录相关信息。 通过以上步骤,我们可以高效地从钉钉系统中获取并加工所需的数据,为后续的数据集成和分析打下坚实基础。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在使用轻易云数据集成平台进行数据集成时,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### 数据请求与清洗 首先,我们需要从源平台获取原始数据,并对其进行必要的清洗和预处理。这一步确保了数据的准确性和一致性,为后续的ETL转换奠定基础。我们假设这一步已经完成,接下来直接进入ETL转换阶段。 #### 数据转换与写入 在轻易云数据集成平台中,配置元数据是实现ETL转换的关键。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "tableField_lgk9jn4p_textField_lgk9jn46,textareaField_lgkiepk7,tableField_lgk9jn4p_textField_lgk9jn45,serialNumberField_lgk9jn2s,selectField_lglw55x0,selectField_lgkiepl6_id,selectField_lgkieplh,selectField_lgkieplf,selectField_lgkieplg,selectField_lgkieplh,textField_lgkieple,textField_lgk9jn2n,dateField_lgkieplu,textField_lgk9jn2n", "bodyName": "tableField_lgk9jn4p", "bodySum": ["tableField_lgk9jn4p_numberField_lgk9jn43"], "header": ["serialNumberField_lgk9jn2s", "selectField_lglw55x0", "selectField_lgkiepl6_id", "textareaField_lgkiepk7", "selectField_lgkieplf", "selectField_lgkieplg", "selectField_lgkieplh", "textField_lgkieple", "textField_lgk9jn2n", "dateField_lgkieplu", "textField_lgk9jn2n"], "body": ["tableField_lgk9jn4p_textField_lgk9jn47", "tableField_lgk9jn4p_textField_lgk9jn46", "tableField_lgk9jn4p_numberField_lgk9jn43", "tableField_lgk9jn4p_radioField_lgk9jn44", "tableField_lgk9jn4p_textField_lgk9jn45"] }, ... } ``` 该配置中定义了多个字段及其对应的转换规则。以下是一些关键字段及其解析方式: - **单据编号(FBillNo)**:直接映射自源数据,无需额外处理。 - **申请组织(FOrgID)**:使用`ConvertObjectParser`解析器,将源字段`tableField_lgk9jn4p_textField_lgk9jn45`中的值转换为目标格式。 - **申请人(FProposerID)**:同样使用`ConvertObjectParser`解析器,将源字段`textField_lgk9jn2n`中的值转换为目标格式。 - **日期(FDate)**:通过函数`FROM_UNIXTIME`将时间戳转换为日期格式。 其他字段也类似,通过不同的解析器和函数进行相应的处理。 #### 数据写入 在完成所有字段的转换后,我们需要将处理后的数据通过API接口写入金蝶云星空。以下是一个典型的请求示例: ```json { "FormId": "ER_ExpReimbursement", "Operation": "BatchSave", ... "Model": { ... // 转换后的具体业务数据 } } ``` 该请求中包含了业务对象表单ID、操作类型以及具体的业务数据模型。通过调用金蝶云星空的`batchSave` API接口,可以将处理后的数据批量保存到目标系统中。 #### 实际案例 假设我们有一条源数据记录,其部分字段如下: ```json { ... // 源平台中的具体业务数据 } ``` 经过上述配置和处理后,生成的目标数据记录如下: ```json { ... // 转换后的具体业务数据 } ``` 最后,通过调用API接口,将这条记录成功写入金蝶云星空,实现了从源平台到目标平台的数据无缝对接。 以上就是使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的一些技术细节和实现方法。通过合理配置元数据和解析规则,可以高效地完成复杂的数据集成任务。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)