使用轻易云平台进行ETL转换与数据写入

  • 轻易云集成顾问-吕修远
### 每刻自定义档案—部门->金蝶组织&部门资料 在现代企业的信息系统中,如何高效、可靠地实现跨平台数据集成是一个不可忽视的技术挑战。本文将聚焦于通过接口对接实现每刻(MaiKe)自定义档案中的“部门”数据自动同步到金蝶云星空(Kingdee Cloud)的"组织与部门"资料,并详细探讨这一过程中涉及的关键技术环节和解决方案。 确保数据不漏单是我们面临的首要问题。在本案例中,通过调用每刻提供的数据查询API `/api/openapi/reference/data/detail/query`,我们可以定时抓取需要集成的数据。这一过程不仅需要考虑API分页和限流的问题,还需处理接口调用可能出现的异常情况。为了应对这些技术难题,我们设计了多重重试机制以及实时监控与日志记录功能,以确保整个数据获取过程的稳定性和可靠性。 面对大量来自每刻的数据,我们必须快速且批量地写入到金蝶云星空。这其中,数据格式差异成为无法回避的问题。因此,在方案设计时,我们进行了定制化的数据映射处理,使得从每刻获取的大量原始数据能够被转换为符合金蝶云星空要求的格式,并通过其批量保存API `batchSave`进行高效写入。 此外,为了使整个系统能够长期稳定运行,我们还加入了一些优化措施,如针对特殊情况下的数据对接异常处理和错误重试机制,以及适配两者间特有业务逻辑需求所做出的个性化调整。 通过轻易云平台全生命周期管理功能提供的一站式配置管理,本项目中的各项操作步骤都能清晰可见,大幅提升了实际运作效率。具体实施细节将在后续内容中逐步展开介绍,包括如何配置接口参数、调试代码及验证集成效果等。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用每刻接口获取并加工数据的技术案例 在轻易云数据集成平台中,调用源系统接口获取并加工数据是数据处理生命周期的第一步。本文将详细探讨如何通过每刻接口`/api/openapi/reference/data/detail/query`获取数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置接口元数据,以便正确调用每刻的API。以下是元数据配置的详细信息: ```json { "api": "/api/openapi/reference/data/detail/query", "method": "POST", "number": "name", "id": "bizCode", "idCheck": true, "condition": [ [ { "field": "enabled", "logic": "eq", "value": "true" } ] ], "request": [ { "field": "referenceDataBizCode", "label": "档案编码", "type": "string", "value": "bm" }, { "field": "keyword", "label": "根据选项名称和选项编码模糊查询", "type": "string" }, { "field": "offset", "label": "分页起始", "type": "string", "describe": "默认值0" }, { "field": "pageSize", "label": "分页条数", "type": "string", "describe": "默认值50,最大值是100", "value":"50" }, { "field":"updatedStartAt", "label":"最近修改时间,时间戳", 'type':"string", 'describe':"查询在此时间及之后修改的数据", 'value':"{LAST_SYNC_TIME}000" }, { 'field':'updatedEndAt', 'label':'最近修改时间,时间戳', 'type':'string', 'describe':'查询在此时间及之前修改的数据', 'value':'{CURRENT_TIME}000' } ] } ``` #### 请求参数详解 1. **referenceDataBizCode**: 档案编码,固定值为`bm`。 2. **keyword**: 用于模糊查询选项名称和选项编码。 3. **offset**: 分页起始位置,默认值为0。 4. **pageSize**: 分页条数,默认值为50,最大值为100。 5. **updatedStartAt**: 最近修改时间的起始时间戳,用于查询在此时间及之后修改的数据。 6. **updatedEndAt**: 最近修改时间的结束时间戳,用于查询在此时间及之前修改的数据。 #### 数据请求与清洗 在配置好元数据后,我们可以通过POST请求来调用API,并获取所需的数据。以下是一个示例请求体: ```json { 'referenceDataBizCode': 'bm', 'keyword': '', 'offset': '0', 'pageSize': '50', 'updatedStartAt': '{LAST_SYNC_TIME}000', 'updatedEndAt': '{CURRENT_TIME}000' } ``` 调用API后,我们会得到一个包含多个记录的JSON响应。接下来,需要对这些原始数据进行清洗和初步加工。清洗过程包括但不限于以下步骤: 1. **过滤无效数据**:根据条件过滤掉不符合要求的数据,例如`enabled`字段不为`true`的记录。 2. **字段映射与转换**:将每刻系统中的字段映射到目标系统中的字段。例如,将每刻中的`bizCode`映射到目标系统中的组织编码。 3. **去重处理**:确保同一批次内没有重复记录。 #### 数据转换与写入 完成初步清洗后,可以将数据转换为目标系统所需的格式,并写入目标数据库或系统。在这个过程中,可以利用轻易云平台提供的可视化工具和实时监控功能,确保每个环节都透明可见,并及时发现和解决潜在问题。 例如,将清洗后的数据转换为金蝶组织&部门资料所需的格式,并通过相应接口写入金蝶系统。这一步通常涉及到复杂的数据映射和转换规则,需要根据具体业务需求进行定制化开发。 #### 实践案例 假设我们需要将每刻系统中的部门信息同步到金蝶系统中,具体步骤如下: 1. 配置并调用每刻API `/api/openapi/reference/data/detail/query` 获取部门信息。 2. 对获取的数据进行清洗,包括过滤无效记录、字段映射、去重等操作。 3. 将清洗后的数据转换为金蝶系统所需格式。 4. 调用金蝶API,将转换后的数据写入金蝶系统。 通过以上步骤,我们可以实现从每刻到金蝶系统的无缝数据集成,大大提升了业务效率和透明度。 以上就是使用轻易云平台调用每刻接口获取并加工数据的技术案例,希望能对实际项目实施有所帮助。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成过程中,ETL(提取、转换、加载)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台将源平台的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### API接口配置与元数据解析 在进行数据转换和写入之前,首先需要理解目标平台API接口的配置和元数据要求。以下是用于将部门信息从源平台写入金蝶云星空的API配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 20, "method": "batchArraySave" }, "request": [ {"field":"FID","label":"FID","type":"string","value":"_findCollection find FID from dac46c84-b360-329a-889f-f8bbb8cca5b1 where FNumber={bizCode}"}, {"field":"FName","label":"金蝶组织名称","type":"string","value":"{name}"}, {"field":"FNumber","label":"金蝶组织编码","type":"string","value":"{bizCode}"}, {"field":"FCreateOrgId","label":"创建组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FUseOrgId","label":"使用组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FDescription","label":"描述","type":"string","value":"部门"}, {"field":"F_JSJT_Text_MKBM","label":"组织编码","type":"string","value":"{parentCode}"}, {"field":"F_JSJT_MulLangText_MKMC","label":"每科名称(店铺名称)","type":"string","value":"{parentCode}"} ], "otherRequest": [ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "BAS_PreBaseDataOne"}, {"field": "Operation", "label": "执行的操作", "type": "string", "value": "BatchSave"}, {"field": "IsAutoSubmitAndAudit", "label": "提交并审核", "type": "bool", "value": false}, {"field": "IsVerifyBaseDataField", "label": "验证基础资料", "type": "bool", "describe": "是否验证所有的基础资料有效性,布尔类,默认false(非必录)", "value": false} ] } ``` #### 数据请求与清洗 在ETL过程的第一步,我们需要从源平台提取原始数据并进行清洗。假设我们已经完成了这一步,现在我们有一个包含部门信息的数据集。 #### 数据转换与写入 1. **字段映射与转换**: - `FID`:通过查找源平台中的唯一标识符(`bizCode`)来获取对应的`FID`。 - `FName`:直接映射为源数据中的部门名称。 - `FNumber`:映射为源数据中的部门编码。 - `FCreateOrgId` 和 `FUseOrgId`:使用固定值`100`,并通过`ConvertObjectParser`进行解析。 - `FDescription`:固定值“部门”。 - `F_JSJT_Text_MKBM` 和 `F_JSJT_MulLangText_MKMC`:映射为上级部门编码。 2. **组装请求体**: 根据上述字段映射关系,我们需要组装一个符合金蝶云星空API要求的请求体。以下是示例代码: ```json { "_findCollection find FID from dac46c84-b360-329a-889f-f8bbb8cca5b1 where FNumber=001", { { field: 'FID', label: 'FID', type: 'string', value: '_findCollection find FID from dac46c84-b360-329a-889f-f8bbb8cca5b1 where FNumber={bizCode}' }, { field: 'FName', label: '金蝶组织名称', type: 'string', value: '{name}' }, { field: 'FNumber', label: '金蝶组织编码', type: 'string', value: '{bizCode}' }, { field: 'FCreateOrgId', label: '创建组织', type: 'string', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '100' }, { field: 'FUseOrgId', label: '使用组织', type: 'string', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '100' }, { field:'FormId', label:'业务对象表单Id', type:'string', describe:'必须填写金蝶的表单ID如:PUR_PurchaseOrder', value:'BAS_PreBaseDataOne' }, { field:'Operation', label:'执行的操作', type:'string', value:'BatchSave' }, { field:'IsAutoSubmitAndAudit', label:'提交并审核', type:'bool', value:false }, { field:'IsVerifyBaseDataField', label:'验证基础资料', type:'bool', describe:'是否验证所有的基础资料有效性,布尔类,默认false(非必录)', value:false } } } ``` 3. **发送请求**: 最后,通过HTTP POST方法将组装好的请求体发送到金蝶云星空API接口: ```python import requests url = "<金蝶云星空API地址>" headers = {'Content-Type': 'application/json'} data = { ... } # 上述组装好的请求体 response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("数据成功写入") else: print(f"错误发生:{response.status_code}, {response.text}") ``` #### 实时监控与调试 为了确保数据集成过程顺利进行,可以利用轻易云提供的平台功能进行实时监控和调试。通过可视化界面,可以方便地查看每个环节的数据流动和处理状态,及时发现并解决问题。 以上是一个完整的数据转换与写入案例,通过详细配置和操作步骤,实现了从源平台到目标平台的数据无缝对接。希望这些技术细节能帮助您更好地理解和应用轻易云数据集成平台。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)