ETL过程中的数据转换与金蝶云星空API对接

  • 轻易云集成顾问-叶威宏
### 钉钉报销数据集成到金蝶云星空的技术案例 在本次系统对接项目中,我们聚焦于将钉钉平台上的报销数据无缝集成到金蝶云星空系统,实现企业财务流程的自动化和高效化。本文将详细解析如何通过轻易云数据集成平台完成这一任务,重点阐述关键API接口调用、数据处理以及异常处理机制。 在该项目中,我们需要从钉钉获取每月的报销记录,并将其转换后写入到金蝶云星空生成相应的付款单。下面我们具体探讨以下几个技术难点及实现方案: #### 如何确保集成钉钉数据不漏单 为了防止遗漏任何一条重要的数据,我们采用了定时抓取和批量同步的方法。从配置上看,每天定时调用`topapi/processinstance/get`接口,以分页方式逐步读取所有待处理的报销记录,并保证各个环节都有日志跟踪与监控。 #### 大量数据快速写入到金蝶云星空 我们利用轻易云提供的大规模并发任务调度能力,通过预先定义好的映射关系和转换规则,将经过清洗和格式规范的数据批量写入至金蝶云星空。这不仅提高了整体效率,也确保了数据在传输过程中的一致性。在这个过程中,调用的是金蝶API `batchSave`方法,实现大批量数据信息的一次性存储。 #### 处理钉钉接口的分页和限流问题 针对分页读取的问题,每次请求都附带上一次返回的cursor参数,以此来判断是否还有更多的数据需要提取。同时,为了解决限流限制,我们设计了一套重试机制,在接收到频率超限错误(error code:10016)后,会自动进入延迟等待状态,然后继续进行请求操作。 #### 金蝶云星空对接异常处理与错误重试机制 对于整个流程中的异步任务执行,我们特别关注可能出现故障的节点,如网络波动、服务器响应超时等意外情况。基于此,制定了一套全面且高效的错误重试策略,包括失败后分级告警、多次尝试恢复等手段,从而最大程度地保障了业务连续性的稳定运行。此外,还通过实时监控模块,对较为重要的数据处理过程进行精细化日常管理与追踪审计。 这些关键步骤有效解决了跨平台大规模数据交互中的复杂挑战,使得曾经繁冗费力且容易出错的信息录入工作变得简便快捷,大大提升了协同办公效率。在下一篇文章部分中,我们会更深入地介绍每个API和演示具体实现 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/D14.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,获取并加工数据,以实现报销数据的集成。 #### API接口配置 首先,我们需要配置API接口的元数据。以下是一个典型的元数据配置示例: ```json { "api": "topapi/processinstance/get", "method": "POST", "idCheck": true, "condition": [ [ { "field": "报销类别", "logic": "eq", "value": "月结货款" } ] ], "formatResponse": [ { "old": "付款方式", "new": "付款方式_new", "format": "string" } ], "request": [ { "label": "审批流的唯一码", "field": "process_code", "type": "string", "value": "PROC-12B1B605-2D28-43FE-80FB-13ECE6165313" }, { "label": "审批实例开始时间。Unix时间戳,单位毫秒。", "field": "start_time", "type": "string", "value": "_function ( {LAST_SYNC_TIME} - ( 3600 * 96) ) * 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**:这是审批流的唯一标识码,用于指定要查询的具体审批流程。 2. **start_time**:审批实例开始时间,这里使用了一个函数计算,将上次同步时间减去96小时(4天),转换为毫秒。 3. **end_time**:审批实例结束时间,直接取当前时间并转换为毫秒。 4. **size**:分页参数,每页最多返回20条记录。 5. **cursor**:分页查询的游标,初始值为0,后续请求中使用返回结果中的`next_cursor`值。 #### 数据请求与清洗 在发送请求时,我们需要确保请求参数正确无误,并且满足条件过滤。例如,我们只需要“报销类别”为“月结货款”的记录。因此,在请求之前,需要对条件进行检查和验证。 ```json "condition":[[{"field":"报销类别","logic":"eq","value":"月结货款"}]] ``` #### 响应格式化 为了使响应数据更符合目标系统的要求,我们可以对响应进行格式化处理。例如,将字段“付款方式”重命名为“付款方式_new”。 ```json "formatResponse":[{"old":"付款方式","new":"付款方式_new","format":"string"}] ``` 这种格式化处理可以通过轻易云平台内置的映射功能来实现,从而确保数据在写入目标系统时符合预期格式。 #### 数据转换与写入 获取并清洗完数据后,我们需要将其转换为目标系统所需的格式,并写入到金蝶付款单中。在这个过程中,可以利用轻易云平台提供的数据转换工具,例如字段映射、类型转换等功能,以确保数据准确无误地传输到目标系统。 通过上述步骤,我们成功实现了从钉钉获取报销数据,并将其加工后写入金蝶系统。这一过程充分利用了轻易云平台的数据集成功能,实现了不同系统间的数据无缝对接。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与写入金蝶云星空API接口 在数据集成的生命周期中,ETL(提取、转换、加载)是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 配置元数据 在进行ETL转换之前,首先需要配置好元数据,以确保数据能够正确地映射到金蝶云星空的API接口。以下是我们要使用的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{{extend.business_id}}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNUMBER"},"value":"FKDLX01_SYS"}, {"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{{extend.finish_time}}"}, {"field":"FSETTLEORGID","label":"结算组织","type":"string","describe":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}"}, {"field":"FPAYORGID","label":"付款组织","type":"string","describe":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}"}, {"field":"FCURRENCYID","label":"币别","type":"string","describe":"币别","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"}, {"field":"FCONTACTUNITTYPE","label":"往来单位类型","type":"string","describe":"往来单位类型","value":"BD_Supplier"}, {"field":"FCONTACTUNIT","label":"往来单位","type":"string","describe":"","value":"","parser":{"name":""}}, {"field":"","label":"","type":"","describe":"","value":"","parser":{"name":""}}, ... ], ... } ``` #### 数据请求与清洗 在这个阶段,我们从源平台(如钉钉报销系统)获取原始数据,并进行必要的清洗和预处理。这一步骤确保了数据的一致性和完整性,为后续的转换和加载打下基础。 #### 数据转换与写入 1. **提取字段**: - `FBillNo`:从`extend.business_id`中提取单据编号。 - `FBillTypeID`:固定值`FKDLX01_SYS`,通过`ConvertObjectParser`解析。 - `FDATE`:从`extend.finish_time`中提取业务日期。 - `FSETTLEORGID`和`FPAYORGID`:通过查找集合中的名称对应的编号进行解析。 - `FCURRENCYID`:固定值`PRE001`,通过解析器解析。 - `FCONTACTUNITTYPE`:固定值为供应商类型。 2. **构建请求体**: 请求体需要包含所有必要的字段及其对应的值。例如: ```json { "FormId": "AP_PAYBILL", "Operation": "BatchSave", "IsAutoSubmitAndAudit": false, "IsVerifyBaseDataField": false, "Model": { "FBillNo": "{{extend.business_id}}", "FBillTypeID": { "FNUMBER": "FKDLX01_SYS" }, ... } } ``` 3. **调用API**: 使用POST方法将构建好的请求体发送到金蝶云星空的批量保存接口。具体代码示例如下: ```python import requests url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { # 构建好的请求体 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data successfully saved to Kingdee Cloud.") else: print("Failed to save data:", response.text) ``` #### 数据验证与监控 为了确保数据准确无误地写入目标平台,必须进行严格的数据验证和监控。可以通过设置日志记录和异常处理机制来实时监控数据流动和处理状态。 以上步骤展示了如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星空API接口所能接收的格式,并最终成功写入目标平台。通过合理配置元数据和有效利用API接口,可以极大提升业务流程的自动化程度和效率。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)