金蝶云星空数据写入最佳实践:ETL转换与API调用

  • 轻易云集成顾问-姚缘
### 钉钉数据集成到金蝶云星空 在企业信息化管理过程中,实现高效的数据流转与处理是提升业务效率的重要环节。本次分享的案例是通过轻易云数据集成平台,将钉钉的数据无缝对接并写入到金蝶云星空。方案名称为“传给钉钉后,回传金蝶字段②”,该项目主要涉及高吞吐量的数据写入、实时监控和批量处理等核心技术要点。 首先,通过调用钉钉的API接口 `topapi/processinstance/get` 获取相关数据,这是确保不漏单的关键步骤。在此过程中,需要考虑如何定时可靠地抓取接口数据,处理分页和限流问题,以及实现自定义的数据转换逻辑,以适应不同系统间的数据结构差异。为了进一步保障数据质量,还需支持异常检测与告警机制,及时发现并解决潜在的问题。 接下来,将获取的数据快速写入到金蝶云星空中,这里使用的是其提供的API接口 `batchSave`。为了应对大量数据批量集成过程中的性能瓶颈,我们配置了高级别的吞吐量控制,并通过集中监控系统实时跟踪任务状态和性能表现。此外,对于可能发生的异常情况,需要设计一套完善的错误重试机制以确保数据完整性和稳定性。 以上就是本次案例技术实施方案的一些关键细节,下面将详细解析各个步骤及具体实现手段。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,获取审批流数据并进行初步加工。 #### API接口配置与调用 首先,我们需要配置API接口的元数据。根据提供的元数据配置,我们可以看到以下关键信息: - **API路径**: `topapi/processinstance/get` - **请求方法**: `POST` - **唯一标识字段**: `id` - **请求参数**: - `process_code`: 审批流的唯一码 - `start_time`: 审批实例开始时间(Unix时间戳,单位毫秒) - `end_time`: 审批实例结束时间(Unix时间戳,单位毫秒) - `size`: 分页参数,每页大小,最多传20 - `cursor`: 分页查询的游标 #### 请求参数解析与设置 1. **审批流的唯一码 (`process_code`)**: ```json {"label":"审批流的唯一码","field":"process_code","type":"string","value":"PROC-BB90A28C-0800-4F37-A972-E23EA258CA09"} ``` 该参数是固定值,用于指定具体的审批流程。 2. **审批实例开始时间 (`start_time`)**: ```json {"label":"审批实例开始时间。Unix时间戳,单位毫秒。","field":"start_time","type":"string","value":"_function ({LAST_SYNC_TIME}-(3600 * 24))* 1000"} ``` 此参数使用了一个函数来计算,从上次同步时间减去一天,并转换为毫秒数。这确保了我们获取的是最近一天的数据。 3. **审批实例结束时间 (`end_time`)**: ```json {"label":"审批实例结束时间,Unix时间戳,单位毫秒","field":"end_time","type":"string","value":"{CURRENT_TIME}000"} ``` 当前时间的Unix时间戳乘以1000,以毫秒为单位。 4. **分页参数 (`size`)**: ```json {"label":"分页参数,每页大小,最多传20。","field":"size","type":"string","value":"20"} ``` 每次请求最多返回20条记录。 5. **分页查询游标 (`cursor`)**: ```json {"label":"分页查询的游标,最开始传0,后续传返回参数中的next_cursor值。","field":"cursor","type":"string"} ``` 初始值为0,在后续请求中使用上一次响应中的`next_cursor`值。 #### 数据请求与清洗 在完成上述配置后,通过轻易云平台发起API请求。以下是一个示例请求体: ```json { "process_code": "PROC-BB90A28C-0800-4F37-A972-E23EA258CA09", "start_time": "_function ({LAST_SYNC_TIME}-(3600 * 24))* 1000", "end_time": "{CURRENT_TIME}000", "size": "20", "cursor": "0" } ``` 响应结果将包含多个字段,其中包括我们关注的数据和分页信息。例如: ```json { "result": { "list": [ { "process_instance_id": "example_id_1", "title": "Example Title", // 更多字段... }, // 更多记录... ], "next_cursor": "12345" } } ``` #### 数据加工与存储 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。在轻易云平台中,可以通过自定义脚本或内置功能实现数据清洗。例如,将日期格式统一转换、过滤无效记录等操作。 最后,将处理后的数据写入目标系统(如金蝶),确保数据的一致性和完整性。在这个过程中,可以利用轻易云平台提供的数据转换功能,将不同系统间的数据格式进行适配。 通过以上步骤,我们成功地从钉钉获取了审批流数据,并进行了初步加工,为后续的数据处理奠定了基础。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台实现这一过程。 #### 1. 数据请求与清洗 首先,我们假设已经完成了数据请求与清洗阶段。此时,源平台的数据已经被提取并清洗完毕,准备进入下一步的数据转换与写入阶段。 #### 2. 数据转换与写入 在这一阶段,我们需要将清洗后的数据转换为金蝶云星空API接口所能接收的格式,并通过API接口将数据写入目标平台。以下是具体的技术步骤和配置细节。 ##### 2.1 配置元数据 根据提供的元数据配置,我们需要设置以下参数: ```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 f51027d3-8cfb-38e3-a878-a07730472b1c 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”:“,”} } ] } ``` ##### 2.2 数据字段映射 在元数据配置中,我们定义了两个主要字段: - `FID`:单据编号,通过SQL查询从数据库中获取。 - `F_VAOJ_TDD`:是否同步钉钉,固定值为"已同步"。 此外,还有一些其他请求参数,如业务对象表单Id (`FormId`)、执行操作 (`Operation`)、是否自动提交并审核 (`IsAutoSubmitAndAudit`) 等,这些参数确保了我们在调用API时能够正确地传递必要的信息。 ##### 2.3 API 调用 配置好元数据后,我们可以通过轻易云的数据集成平台发起API调用。以下是一个示例代码片段,用于展示如何通过HTTP POST方法调用金蝶云星空的`batchSave` API: ```python import requests import json url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { 'FormId': 'CN_PAYAPPLY', 'Operation': 'BatchSave', 'IsAutoSubmitAndAudit': False, 'IsVerifyBaseDataField': False, 'NeedUpDateFields': ['F_VAOJ_TDD'], 'Model': [ { 'FID': '_findCollection find FID from f51027d3-8cfb-38e3-a878-a07730472b1c where FBillNo={{单据编号}}', 'F_VAOJ_TDD': '已同步' } ] } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data successfully written to Kingdee Cloud') else: print('Failed to write data to Kingdee Cloud:', response.text) ``` ##### 2.4 实时监控与日志记录 为了确保数据成功写入目标平台,我们可以利用轻易云提供的实时监控功能,查看每次API调用的状态和返回结果。此外,还可以设置日志记录,将每次操作的详细信息记录下来,以便后续排查和分析。 #### 小结 通过上述步骤,我们成功地将源平台的数据经过ETL转换后,通过金蝶云星空API接口写入到目标平台。在这个过程中,充分利用了轻易云的数据集成能力,实现了不同系统间的数据无缝对接。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)