轻易云平台ETL转换与金蝶云星空API对接实践

  • 轻易云集成顾问-谢楷斌
### 致远A8+数据集成到金蝶云星空的技术实践:正式OA-ERP外购件采购申请单 在企业信息系统中,跨平台的数据集成是一个复杂而关键的任务。本文将重点讨论如何实现致远A8+与金蝶云星空之间的数据对接,以"正式OA-ERP外购件采购申请单"为例,通过API接口的运用,实现高效、可靠的数据传输。 #### 系统概览及主要挑战 1. **高效数据写入** - 在本案例中,我们需要将大量来自致远A8+系统的数据快速、高吞吐量地写入到金蝶云星空。这不仅要求接口具有较高的并发处理能力,还需保障数据不丢失、不重复。 2. **实时监控和告警** - 数据流动过程中的透明度和可视化管理是确保集成成功的重要环节。通过集中监控和告警机制,可以实时跟踪各个数据集成任务的状态,并及时发现并解决问题。 3. **自定义转换逻辑** - 由于两者之间存在不同的数据结构和业务需求,需要支持自定义转换逻辑,以便在传输过程中动态调整数据格式和内容。 4. **异常处理与重试机制** - 为应对API调用失败以及网络抖动等突发情况,必须设计完善的异常处理流程和重试机制,确保每一条记录最终都能正确进入目标系统。 #### 实施步骤及技术要点 1. **数据获取**(致远A8+ API) ```http /seeyon/rest/flow/FromFinish/{templateCode}/{startTime}/{endTime} ``` 通过该接口定时抓取外购件采购申请单,将其批量导出进行后续处理。需注意分页问题及限流控制,以提高请求效率并避免对源系统造成过大负载。 2. **批量写入**(金蝶云星空 API) ```javascript batchSave ``` 使用`batchSave`接口完成多条记录的一次性导入,从而显著减少API调用次数,提高整体性能。此外还需配置必要的映射关系,使得输入输出字段对应合理,保证数据准确落地。 3. **指标监控与质量检测** 集成过程中的每一步都由实时日志记录,并通过仪表盘展示,可随时查看运行状态。同时,对于出现异常或错误的信息,会触发预设命令进行自动纠正或再尝试操作,从而最大程度降低人工干预成本。 以上即为本案例研究开篇部分。在后续文章中,我们会更详细讲解每个阶段所遇到的问题 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用致远A8+接口获取并加工数据的技术实现 在数据集成过程中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用致远A8+接口`/seeyon/rest/flow/FromFinish/{templateCode}/{startTime}/{endTime}`来获取并加工数据。 #### 接口配置与调用 首先,我们需要了解该接口的基本信息和参数配置。根据元数据配置,接口的路径为`/seeyon/rest/flow/FromFinish/{templateCode}/{startTime}/{endTime}`,采用GET方法进行请求。以下是具体的参数说明: - `templateCode`: 模板代码,类型为字符串,在本案例中固定为`WGJCGSQD`。 - `startTime`: 起始时间,类型为字符串,使用上次同步时间(`{{LAST_SYNC_TIME|date}}`)。 - `endTime`: 结束时间,类型为字符串,通过函数计算得到当前时间的下一天(`_function DATE_FORMAT(DATE_ADD('{{CURRENT_TIME|date}}', INTERVAL 1 DAY), '%Y-%m-%d')`)。 #### 请求参数配置 在请求参数中,我们需要设置以下字段: ```json { "field": "templateCode", "label": "templateCode", "type": "string", "value": "WGJCGSQD" }, { "field": "startTime", "label": "startTime", "type": "string", "value": "{{LAST_SYNC_TIME|date}}" }, { "field": "endTime", "label": "endTime", "type": "string", "value": "_function DATE_FORMAT(DATE_ADD('{{CURRENT_TIME|date}}', INTERVAL 1 DAY), '%Y-%m-%d')" }, { "field": "qcloudflowList", "label": "qcloudflowList", "type": "string", "value": "qcloudflowList" } ``` 这些参数确保了我们能够准确地获取所需的数据。 #### 数据处理与自动填充响应 在获取到数据后,我们需要对其进行处理。根据元数据配置中的`autoFillResponse: true`,平台会自动将响应结果填充到相应的数据结构中。这一步极大简化了开发者的工作,使得数据处理更加高效。 #### 数据清洗与转换 在数据清洗阶段,我们需要确保获取的数据符合目标系统的要求。这包括但不限于: - 数据格式转换:将日期格式统一转换为目标系统所需的格式。 - 数据过滤:剔除无效或重复的数据。 - 数据校验:确保所有必填字段均有值且符合预期格式。 例如,对于日期字段,可以使用如下代码进行格式转换: ```python import datetime def convert_date_format(date_str): date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d') return date_obj.strftime('%Y/%m/%d') # 示例调用 converted_date = convert_date_format('2023-10-01') print(converted_date) # 输出: '2023/10/01' ``` #### 数据写入目标系统 完成数据清洗与转换后,我们需要将处理后的数据写入目标系统。在轻易云平台上,这一步通常通过配置相应的写入操作来实现。例如,可以配置一个POST请求,将处理后的数据发送到目标系统的API接口。 ```json { "api": "/target/system/api/path", "method": "POST", ... } ``` 通过以上步骤,我们实现了从致远A8+系统获取、清洗、转换并写入目标系统的完整流程。这一过程不仅提高了数据集成效率,也确保了数据的一致性和准确性。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台的ETL转换与金蝶云星空API接口集成案例 在轻易云数据集成平台中,ETL(Extract, Transform, Load)过程是数据生命周期管理的关键步骤之一。本文将深入探讨如何将已经集成的源平台数据进行ETL转换,并通过金蝶云星空API接口写入目标平台。 #### 元数据配置解析 以下是元数据配置,用于将外购件采购申请单的数据写入金蝶云星空: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNUMBER"},"value":"CGSQD01_SYS"}, {"field":"FApplicationDate","label":"申请日期","type":"string","describe":"111","value":"{{mainData.日期1|datetime}}"}, {"field":"FRequestType","label":"申请类型","type":"string","describe":"111","value":"Material"}, {"field":"FApplicationOrgId","label":"申请组织","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FCurrencyId","label":"币别","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"111","value":"{{mainData.流水号}}"}, {"field":"FExchangeTypeId","label":"汇率类型","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"HLTX01_SYS"}, {"field": "F_Boey_JQ", "label": "交期", "type": "string", "value": "{{mainData.交期|datetime}}"}, { "field": "FEntity", "label": "明细信息", "type": "array", "describe": "111", "value": "detail_list", "children":[ {"field": "FMaterialId", "label": "物料编码", "type": "string", "describe": "物料编码", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{detail_list.物料编码}}" }, {"field": "FReqQty", "label": "申请数量", "type": "string", "describe": "申请数量", "value": "{{detail_list.数量}}" }, { "field": "F_Boey_YT", "label": "用途", "type": "string", "describe": "备注", "value": "{{detail_list.用途}}" } ] } ], ... } ``` #### 数据转换与写入过程 ##### 数据提取与清洗 首先,从源系统提取原始数据并进行必要的清洗操作。清洗操作包括去除无效数据、标准化日期格式等。清洗后的数据将被映射到目标平台所需的字段格式。 ##### 数据转换 在元数据配置中,我们定义了多个字段及其对应的解析器和值。例如,`FBillTypeID` 字段使用 `ConvertObjectParser` 将值 `CGSQD01_SYS` 转换为金蝶云星空能够识别的对象格式。类似地,其他字段如 `FCurrencyId`, `FExchangeTypeId` 等也使用相应的解析器进行转换。 ```json { ... { field: 'FBillTypeID', label: '单据类型', type: 'string', describe: '111', parser: { name: 'ConvertObjectParser', params: 'FNUMBER' }, value: 'CGSQD01_SYS' }, ... } ``` ##### 构建请求体 根据元数据配置,构建符合金蝶云星空API接口要求的请求体。以下是一个示例请求体: ```json { FormId: 'PUR_Requisition', Operation: 'BatchSave', IsAutoSubmitAndAudit: true, IsVerifyBaseDataField: false, Model: { FBillTypeID: { FNumber: 'CGSQD01_SYS' }, FApplicationDate: '2023-10-10T00:00:00Z', FRequestType: 'Material', FApplicationOrgId: { FNumber: '100' }, FCurrencyId: { FNumber: 'PRE001' }, FBillNo: '202310100001', FExchangeTypeId: { FNumber: 'HLTX01_SYS' }, F_Boey_JQ: '2023-11-10T00:00:00Z', FEntity: [ { FMaterialId:{ FNumber:'MAT001'}, FReqQty:'100', F_Boey_YT:'生产用' } ] } } ``` ##### 数据写入 使用HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口进行批量保存操作。确保在发送请求前,对所有必填字段进行验证,以避免因缺失或格式错误导致的数据写入失败。 ```javascript const axios = require('axios'); axios.post('https://api.kingdee.com/k3cloud/batchSave', requestBody) .then(response => { console.log('Data saved successfully:', response.data); }) .catch(error => { console.error('Error saving data:', error); }); ``` #### 技术要点总结 1. **解析器应用**:通过 `ConvertObjectParser` 等解析器,将源系统的数据格式转换为目标系统所需格式。 2. **动态值替换**:利用模板语法如 `{{mainData.日期1|datetime}}` 动态替换值,实现灵活的数据映射。 3. **请求体构建**:根据元数据配置,精确构建符合目标系统API接口要求的请求体。 4. **错误处理**:在实际操作中,应对可能出现的错误进行捕获和处理,以确保数据写入过程的可靠性。 通过上述步骤,我们成功实现了从源平台到金蝶云星空的数据ETL转换与写入,为企业实现高效的数据集成提供了有力支持。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)