将清洗后的数据ETL转换并写入金蝶云星空API

  • 轻易云集成顾问-钟家寿
### 钉钉数据集成到金蝶云星空案例分享:修改下推的付款单③ 在企业信息化系统中,实现不同平台之间的数据无缝连接与高效流转是提升业务协同水平的重要一环。本文将详细介绍如何通过一个具体案例——“修改下推的付款单③”,实现从钉钉数据集成到金蝶云星空。 这个方案主要解决企业在日常操作中遇到的几个技术难题:如何确保集成过程中不漏订单、大量数据快速写入、可靠抓取接口数据及处理分页和限流问题。以下我们将逐步拆解每个步骤,探讨其中涉及到的技术细节。 首先,我们需要调用钉钉接口 `topapi/processinstance/get` 来获取待处理的数据。这一步骤尤为重要,因为它决定了后续能够无遗漏地提取所有必要的信息。在实际应用中,为确保覆盖全面,需要设置定时任务来周期性地请求该API,并对返回结果进行准确解析和存储。同时,还要预防接口可能出现限流情况,通过合理设计重试机制来保证连续性访问。 接下来,针对从钉钉获取的数据,我们需进行格式转换,以匹配金蝶云星空API `batchSave` 的要求。这涉及两个平台间数据结构与字段名称的不一致性调整。此外,还要注意字段类型转换的问题,例如日期格式、不同比例的小数点精度等。在这一部分,我们可以利用轻易云提供的可视化映射工具,有效简化这一复杂过程。 最后,将整理好的完整数据批量写入至金蝶云星空。为了应对大量并发写入带来的性能瓶颈,可以采用分批次传输策略,同时结合错误重试机制提升稳定性。一旦某条记录写入失败,可以自动记录日志并触发相应警报,以便及时响应和处置,从而提高整体系统鲁棒性和操作透明度。 总之,通过合理配置与使用相关API接口,以及借助轻易云平台所提供的一系列高效工具,我们能在多个角度上优化跨系统的数据流水线,提高生产效率,并保障业务流程顺畅运行。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,并对获取的数据进行初步加工。 #### 配置元数据 首先,我们需要配置元数据以便正确调用API。以下是配置的元数据示例: ```json { "api": "topapi/processinstance/get", "method": "POST", "number": "business_id", "id": "单据编号", "idCheck": true, "condition": [ [ { "field": "extend.status", "logic": "eq", "value": "COMPLETED" } ] ], "request": [ { "label": "审批流的唯一码", "field": "process_code", "type": "string", "value": "PROC-954C7A18-093B-44A3-AF47-975DB03A725D" }, { "label": "审批实例开始时间。Unix时间戳,单位毫秒。", "field": "start_time", "type": "string", "value": "{DAYS_AGO_3}000" }, { "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": "" } ] } ``` #### 调用API 在调用API时,我们需要确保请求参数的正确性。以下是一个典型的POST请求示例: ```http POST /topapi/processinstance/get HTTP/1.1 Host: oapi.dingtalk.com Content-Type: application/json { “process_code”: “PROC-954C7A18-093B-44A3-AF47-975DB03A725D”, “start_time”: “{DAYS_AGO_3}000”, “end_time”: “{CURRENT_TIME}000”, “size”: 20, “cursor”: 0 } ``` #### 数据清洗与转换 获取到的数据通常需要进行清洗和转换,以便后续处理和存储。以下是一些常见的数据清洗步骤: 1. **过滤无效数据**:根据条件过滤掉不符合要求的数据,例如状态不是“COMPLETED”的记录。 2. **字段映射**:将API返回的数据字段映射到目标系统所需的字段。例如,将“business_id”映射为“单据编号”。 3. **格式转换**:将时间戳等字段转换为目标系统所需的格式。 以下是一个简单的数据清洗示例: ```python def clean_data(data): cleaned_data = [] for record in data: if record['extend']['status'] == 'COMPLETED': cleaned_record = { '单据编号': record['business_id'], '审批流编码': record['process_code'], '开始时间': convert_timestamp(record['start_time']), '结束时间': convert_timestamp(record['end_time']) } cleaned_data.append(cleaned_record) return cleaned_data def convert_timestamp(timestamp): # 将Unix时间戳转换为标准日期格式 return datetime.datetime.fromtimestamp(int(timestamp) / 1000).strftime('%Y-%m-%d %H:%M:%S') ``` #### 数据写入 经过清洗和转换后的数据可以写入目标系统。在轻易云平台上,这一步通常通过配置相应的写入操作来实现。 ```json { // 写入目标系统的配置示例 } ``` 通过上述步骤,我们完成了从调用钉钉接口获取数据到初步加工处理的一系列操作。这些技术细节不仅确保了数据集成过程的高效性,也为后续的数据分析和业务决策提供了坚实基础。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 将源平台数据ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台配置元数据,实现这一过程。 #### API接口配置 在进行ETL转换之前,我们首先需要了解目标平台的API接口配置。根据提供的元数据配置,金蝶云星空API接口的主要参数如下: - **api**: "batchSave" - **method**: "POST" - **idCheck**: true - **operation**: {"method":"batchArraySave","rows":1,"rowsKey":"array"} - **request**: 包含具体字段映射和转换逻辑 - **otherRequest**: 包含业务对象表单ID、操作类型等其他必要参数 #### 数据请求与清洗 在ETL过程中,首先需要从源平台获取原始数据,并进行必要的数据清洗和预处理。这里我们假设已经完成了这一阶段,并且获得了清洗后的数据。 #### 数据转换与写入 接下来,我们重点关注如何将清洗后的数据转换为金蝶云星空API接口所能接收的格式,并通过API接口写入目标平台。 1. **字段映射与转换** 根据元数据配置,我们需要将源平台的数据字段映射到金蝶云星空API接口所需的字段。例如: - `FID`: 单据编号,通过查询语句 `_findCollection find FID from b91e58dd-b358-385e-a6e9-58ae2b8c37ff where FBillNo={Number}` 获取。 - `F_VAOJ_HKSX`: 货款属性,通过函数 `_function case '{{货款属性}}' when '成品' then 'CP' else 'FL' end` 转换。 - `FREMARK`: 备注,通过模板字符串 `{title}-{{收款人(公司名称)}}-{{备注}}` 拼接。 - `FBillNo`: 单据编号,直接映射为 `{business_id}`。 2. **其他必要参数** 除了字段映射外,还需要设置一些其他必要参数: - `FormId`: 业务对象表单Id,例如 "AP_PAYBILL"。 - `Operation`: 执行的操作,例如 "BatchSave"。 - `IsAutoSubmitAndAudit`: 是否提交并审核,布尔值 false。 - `IsVerifyBaseDataField`: 是否验证基础资料有效性,布尔值 false。 - `NeedUpDateFields`: 需要更新的字段列表,通过解析器将字符串 `"F_VAOJ_HKSX,FREMARK,FBillNo"` 转换为数组。 3. **构建请求体** 根据上述配置,我们可以构建出符合金蝶云星空API接口要求的请求体。例如: ```json { "FormId": "AP_PAYBILL", "Operation": "BatchSave", "IsAutoSubmitAndAudit": false, "IsVerifyBaseDataField": false, "NeedUpDateFields": ["F_VAOJ_HKSX", "FREMARK", "FBillNo"], "array": [ { "FID": "_findCollection find FID from b91e58dd-b358-385e-a6e9-58ae2b8c37ff where FBillNo={Number}", "F_VAOJ_HKSX": "_function case '{{货款属性}}' when '成品' then 'CP' else 'FL' end", "FREMARK": "{title}-{{收款人(公司名称)}}-{{备注}}", "FBillNo": "{business_id}" } ] } ``` 4. **发送请求** 最后,将构建好的请求体通过HTTP POST方法发送到金蝶云星空API接口。确保在发送请求前,对所有字段和参数进行校验,以避免因格式或内容不正确导致的数据写入失败。 通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并通过金蝶云星空API接口实现了数据的无缝对接和写入。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)