从钉钉到金蝶云星空:实现高效数据同步的实践案例

  • 轻易云集成顾问-潘裕
### 钉钉数据集成到金蝶云星空案例分享:receive-新收款单(其他业务收款)V4.0 在企业级应用场景中,实现不同系统间的数据无缝对接是提升业务效率的重要手段。本篇文章将聚焦于一个具体的技术案例,介绍如何使用轻易云数据集成平台,将钉钉系统中的数据成功集成到金蝶云星空的信息流中。方案名称为“receive-新收款单(其他业务收款)V4.0”,该方案旨在解决财务管理流程中数据分散、处理复杂的问题。 **1. 获取钉钉接口数据** 此解决方案首先通过调用钉钉API v1.0/yida/processes/instances定期可靠地抓取所需的数据信息。为了应对大规模多频次的数据请求,从接口限流与分页处理出发,我们设计了一套高吞吐量的数据获取机制。这不仅确保了实时性,还避免了遗漏单据的问题。 **2. 数据质量监控与异常检测** 获取到原始数据后,进行必要的质量监控和异常检测极为重要。一旦发现不合规或异常数据信息,会触发预设的告警并记录日志,以便后续操作人员检查和纠正。在这个过程中,利用统一视图和控制台功能,有效帮助我们全面掌握API资产情况,实现资源优化配置。 **3. 数据转换与映射** 由于钉钉与金蝶云星空之间存在显著的数据格式差异,我们专门开发了自定义的数据转换逻辑,根据特定业务需求进行细粒度调整。此步骤采用可视化工具来设计和管理整个转换过程,使得配置更加直观简洁,减少人为错误几率,同时提高开发效率。 **4. 批量写入至金蝶云星空** 经过上述清洗与转化后的优质数据会批量提交至金蝶云星空,通过其batchSave API完成最终存储操作。这需要特别关注两个方面:一是确保大量突发性负载下依然能保持稳定、高效的数据写入能力;二是在出现网络波动或者API故障时能及时启动重试机制,以保证任务执行的一致性和完整性。 —— 以上就是整合过程中四个关键环节之概述,下文将进一步详解每个环节中的细节实现及特定挑战应对策略。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口v1.0/yida/processes/instances获取并加工数据 在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据。本文将详细探讨如何通过钉钉接口`v1.0/yida/processes/instances`来获取数据,并进行初步加工处理。 #### 接口调用配置 首先,我们需要配置API调用的元数据。根据提供的metadata,我们可以看到该接口使用POST方法,并包含多个请求参数。以下是关键参数及其配置: - **分页页码(pageNumber)**:用于控制分页,初始值为`{PAGINATION_START_PAGE}`。 - **分页大小(pageSize)**:每页返回的数据条数,初始值为`{PAGINATION_PAGE_SIZE}`。 - **应用ID(appType)**:固定值为`APP_WTSCMZ1WOOHGIM5N28BQ`。 - **应用秘钥(systemToken)**:固定值为`IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4`。 - **用户ID(userId)**:固定值为`16000443318138909`。 - **语言(language)**:默认为中文,即`zh_CN`。 - **表单ID(formUuid)**:固定值为`FORM-OS566L910XZ9MAUKDXIG9BZKX2P12AUKTGKGL5`。 此外,还有一些可选的过滤条件,如费用类型、部门过滤、创建时间范围等,这些条件可以根据实际需求进行调整。 #### 请求示例 以下是一个完整的请求示例: ```json { "pageNumber": "1", "pageSize": "20", "appType": "APP_WTSCMZ1WOOHGIM5N28BQ", "systemToken": "IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4", "userId": "16000443318138909", "language": "zh_CN", "formUuid": "FORM-OS566L910XZ9MAUKDXIG9BZKX2P12AUKTGKGL5", "searchFieldJson": { "selectField_lgkgut6u": ["其他业务收款", "银行理财"], "selectField_lgkgut6b": "" }, "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. **字段映射与重命名**: - 将原始数据中的字段映射到目标系统所需的字段名称。例如,将`processInstanceId`映射为目标系统中的唯一标识符。 2. **数据格式转换**: - 将日期格式从UTC时间转换为本地时间,或者根据业务需求进行其他格式转换。 3. **数据过滤与筛选**: - 根据业务逻辑对数据进行过滤,例如只保留审批结果为“agree”的记录。 #### 实践案例 假设我们需要集成一个新的收款单(其他业务收款),我们可以按照以下步骤进行操作: 1. **调用API获取数据**: - 使用上述请求示例,通过POST方法调用钉钉接口,获取符合条件的流程实例数据。 2. **解析响应数据**: - 对响应的数据进行解析,提取出需要的字段信息,如标题、流程实例ID等。 3. **清洗与转换**: - 对提取出的字段进行必要的清洗和转换,例如将日期格式统一、去除无效字符等。 4. **写入目标系统**: - 将清洗后的数据写入目标系统,以便进一步处理和分析。 通过以上步骤,我们可以高效地从钉钉系统中获取并加工所需的数据,为后续的数据处理和分析奠定基础。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成过程中,将源平台的数据转换为目标平台所能接受的格式是关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将已集成的源数据通过ETL(提取、转换、加载)过程,转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 元数据配置解析 元数据配置是ETL过程中的核心部分,它定义了如何将源数据字段映射到目标平台的字段。以下是元数据配置的详细解析: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"{serialNumberField_lgorr6rv}(SKD)"}, {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"SKDLX02_SYS"}, {"field":"FDATE","label":"日期","type":"string","value":"_function FROM_UNIXTIME( ( {dateField_lgkgut9r} \/ 1000 ) ,'%Y-%m-%d' )"}, {"field":"FPAYORGID","label":"收款组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{textField_lgkgut7u}"}, {"field":"FCONTACTUNITTYPE","label":"往来单位类型","type":"string","value":"{textField_lgkgut7p}"}, {"field":"FCONTACTUNIT","label":"往来单位","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{textField_lgkgut7o}"}, {"field":"FPAYUNITTYPE","label":"付款单位类型","type":"string","value":"{textField_lgkgut7p}"}, {"field":"FPAYUNIT","label":"付款单位","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{textField_lgkgut7o}"}, {"field":"FCURRENCYID","label":"币别","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"}, {"field":... ``` #### 数据字段映射与转换 1. **单据编号(FBillNo)**: - 类型:字符串 - 值:`{serialNumberField_lgorr6rv}(SKD)` - 描述:将源数据中的`serialNumberField_lgorr6rv`字段值添加后缀“(SKD)”作为单据编号。 2. **单据类型(FBillTypeID)**: - 类型:字符串 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 值:`SKDLX02_SYS` - 描述:使用固定值“SKDLX02_SYS”并通过`ConvertObjectParser`进行转换。 3. **日期(FDATE)**: - 类型:字符串 - 值:`_function FROM_UNIXTIME( ( {dateField_lgkgut9r} / 1000 ) ,'%Y-%m-%d' )` - 描述:将UNIX时间戳转换为标准日期格式。 4. **收款组织(FPAYORGID)**: - 类型:字符串 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 值:`{textField_lgkgut7u}` - 描述:将源数据中的文本字段值通过转换器进行处理。 5. **往来单位类型与往来单位**: - 类型:字符串 - 转换器与参数同上,分别为`{textField_lgkgut7p}`和`{textField_lgkgut7o}`。 6. **币别、结算币别、结算本位币、帐薄**: - 类型:字符串 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 固定值:“PRE001” #### 分录处理 分录部分涉及多个子字段,每个子字段都需要进行相应的映射和转换: 1. **结算方式(FSETTLETYPEID)**: - 类型:字符串 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 值:“JSFS04_SYS” 2. **收款用途(FPURPOSEID)**: - 类型:字符串 - 转换器同上,值为 `{textField_lgkgut9o}`。 3. **费用承担部门、应收金额、我方银行账号、登账日期、备注**: 各自对应不同的源字段,通过相应的转换器进行处理。 #### API请求构建 根据上述元数据配置,我们需要构建一个符合金蝶云星空API要求的请求体。以下是示例请求体结构: ```json { "FormId": "AR_RECEIVEBILL", "Operation": "BatchSave", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": false, "Model": { "FBillNo": "{serialNumberField_lgorr6rv}(SKD)", ... // 更多字段映射... "FRECEIVEBILLENTRY": [ { ... // 分录子字段映射... } ] } } ``` #### 数据写入 使用轻易云的数据集成功能,通过HTTP POST方法将构建好的请求体发送到金蝶云星空API接口,实现数据写入。具体步骤如下: 1. 配置HTTP请求头,确保包含必要的认证信息。 2. 使用POST方法发送请求体到指定API地址。 3. 捕获响应结果,处理成功或失败情况。 通过上述步骤,我们可以高效地完成从源平台到金蝶云星空的ETL过程,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,还确保了数据的一致性和准确性。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)