利用轻易云平台进行数据ETL并写入金蝶云星空的指南

  • 轻易云集成顾问-林峰
### 钉钉数据集成到金蝶云星空:样机借用申请到其他出库单案例分享 在企业运营中,系统对接和数据集成一直是IT部门的核心任务之一。我们将详细介绍一个具体的系统对接案例——从钉钉的样机借用申请流程,到金蝶云星空中的其他出库单处理。本篇文章重点阐述如何高效、准确地实现数据的无缝集成。 #### 数据获取与可靠性保证 为了确保每一条样机借用申请记录都被捕获并传输至金蝶云星空,我们使用了钉钉提供的数据接口 `topapi/processinstance/get`。这个API能够稳定地抓取所有相关数据,并支持定时执行,以保证及时同步。通过轻易云的数据集成平台,我们设置了一个定时调度器,每小时调用该接口一次,从而避免漏单问题。此外,为了解决大批量数据写入带来的性能瓶颈,采用了分批次写入策略,大幅提升效率和稳定性。 #### 接口调用与分页处理 由于钉钉API存在分页限制,我们需要特别注意处理多页返回结果。在实现过程中,通过循环调用`topapi/processinstance/get`接口并解析JSON响应来逐页获取完整的数据。这不仅保障了数据完整性,还有效应对可能发生的限流问题。例如,在每次请求后引入短暂延迟,以避免触发限流机制。 #### 数据格式转换与映射 当从钉钉获取数据后,面临的一大挑战是如何将其转化为金蝶云星空所能识别的数据结构。这涉及字段名称、类型以及值域等方面的不一致。因此,我们设计了一套自定义映射规则,对每个字段进行精细化匹配。同时利用轻易云提供的数据转换工具,将原始JSON格式转为满足金蝶API要求的XML或其他合适形式,使得batchSave操作顺利完成。 这一系列措施,不仅成功解决了不同系统间的数据交互问题,还显著提升了业务运作效率和透明度。在实际操作中,如遇任何异常情况,都会立即记录并触发重试机制,确保最终的一致性和可靠性。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将深入探讨如何通过调用钉钉接口`topapi/processinstance/get`来获取数据,并进行初步加工,为后续的数据处理和写入打下坚实基础。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用钉钉的API接口。以下是我们在轻易云平台上使用的元数据配置: ```json { "api": "topapi/processinstance/get", "effect": "QUERY", "method": "POST", "number": "number", "id": "id", "name": "number", "idCheck": true, "autoFillResponse": true } ``` 这些配置项具有特定的含义: - `api`: 指定要调用的API接口,这里是`topapi/processinstance/get`。 - `effect`: 表示该操作是一个查询操作。 - `method`: 使用POST方法进行请求。 - `number`和`id`: 定义了请求参数中的标识字段。 - `name`: 在返回的数据中,将使用`number`字段作为名称。 - `idCheck`: 启用ID检查,确保请求参数中的ID有效。 - `autoFillResponse`: 自动填充响应数据,简化后续处理步骤。 #### 数据请求与清洗 在实际操作中,我们首先需要构建一个有效的POST请求,以获取钉钉系统中的流程实例数据。以下是一个示例请求体: ```json { "process_instance_id": "<实例ID>" } ``` 发送请求后,钉钉会返回一个包含流程实例详细信息的JSON对象。假设返回的数据如下: ```json { "dingtalk_smartwork_bpms_processinstance_get_response": { "result": { "process_instance_id": "<实例ID>", "title": "<流程标题>", "status": "<流程状态>", ... } } } ``` #### 数据转换与初步加工 接收到响应数据后,我们需要对其进行初步加工,以便后续处理。具体步骤包括: 1. **提取关键字段**:从响应中提取出我们关心的字段,例如`process_instance_id`, `title`, 和 `status`等。 2. **格式转换**:根据目标系统(如金蝶)的要求,对数据格式进行转换。例如,将日期格式从ISO标准转换为目标系统所需的格式。 3. **数据校验**:根据业务规则,对提取的数据进行校验。例如,确保流程状态为“已完成”时才继续处理。 以下是一个简单的数据转换示例代码: ```python def process_dingtalk_response(response): result = response.get("dingtalk_smartwork_bpms_processinstance_get_response", {}).get("result", {}) processed_data = { "process_instance_id": result.get("process_instance_id"), "title": result.get("title"), "status": result.get("status"), # 添加更多字段处理逻辑 } return processed_data # 示例调用 response = { # 假设这是从API获取到的响应 } processed_data = process_dingtalk_response(response) print(processed_data) ``` #### 自动填充响应 由于配置了`autoFillResponse: true`,轻易云平台会自动将API响应中的字段填充到预定义的数据结构中。这一步骤极大简化了开发工作,使得我们可以专注于业务逻辑而非底层实现。 #### 总结 通过上述步骤,我们成功地调用了钉钉接口`topapi/processinstance/get`,并对返回的数据进行了初步加工。这为后续的数据转换与写入奠定了基础。在实际项目中,根据具体需求可能还需要进一步细化和优化这些步骤,但总体思路是一致的。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(提取、转换、加载)是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据经过ETL转换后,写入金蝶云星空API接口。 #### API接口配置 首先,我们需要了解目标平台金蝶云星空的API接口配置。根据提供的元数据配置,金蝶云星空的API接口为`batchSave`,采用`POST`方法,且需要进行ID检查。以下是详细的请求字段配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号"}, {"field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "标准其他出库单:QTCKD01_SYS\n资产出库:QTCKD02_SYS\nVMI出库:QTCKD03_SYS\n费用物料出库:QTCKD04_SYS\n库存调整:QTCKD05_SYS", "parser": {"name": "ConvertObjectParser", "params":"FNumber"}, "value":"QTCKD10_SYS"}, {"field": "FPickOrgId", "label": "领用组织", "type": "string", "describe":"领用组织", ... } ], ... } ``` #### 数据字段解析与转换 在ETL过程中,数据字段的解析与转换是至关重要的一环。以下是部分关键字段的解析与转换过程: 1. **单据类型(FBillTypeID)**: - 使用`ConvertObjectParser`解析器,将内部编码转换为金蝶系统识别的编码。 - 示例值为`QTCKD10_SYS`,表示标准其他出库单。 2. **领用组织(FPickOrgId)**: - 同样使用`ConvertObjectParser`解析器,将内部组织编码转换为金蝶系统识别的编码。 - 示例值为`101`。 3. **日期(FDate)**: - 直接映射源平台的借用日期字段。 - 示例值为`{{借用日期}}`。 4. **备注(FNote)**: - 使用自定义函数处理空值情况。 - 示例代码:`_function CASE '{{备注}}' WHEN 'NULL' THEN '' ELSE '{{备注}}' END` 5. **明细信息(FEntity)**: - 包含多个子字段,如物料编码(FMaterialId)、实发数量(FQty)、发货仓库(FStockId)等。 - 每个子字段均使用相应的解析器进行转换,如物料编码使用`ConvertObjectParser`解析器,将内部物料编码转换为金蝶系统识别的编码。 #### 请求示例 完成所有字段的解析与转换后,我们将生成一个完整的请求示例: ```json { "FormId": "STK_MisDelivery", ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { FBillNo: '20230101', FBillTypeID: 'QTCKD10_SYS', FPickOrgId: '101', FStockOrgId: '101', FDate: '2023-01-01', FDeptId: '_findCollection find FNumber from ... where FName=... FUseOrgId=101', FNote: '_function CASE \'备注\' WHEN \'NULL\' THEN \'\' ELSE \'备注\' END', FStockDirect: 'GENERAL', F_TLQG_TextDDLSH: '流水号123456', F_TLQG_BaseLLRY: '_findCollection find FNumber from ... where ...', FEntity: [ { FMaterialId: '物料编码12345', FQty: '100', FStockId: 'CK008', FSTOCKSTATUSID: 'KCZT01_SYS', FEntryNote: '', FBaseQty: 100, FKeeperTypeId: 'BD_KeeperOrg', FStockLocId: {FSTOCKLOCID__FF100008:'Q'} } ] } } } } } } } } } } }, ... } ``` #### 执行操作 最后,通过轻易云数据集成平台执行上述请求,将数据写入金蝶云星空。确保所有基础资料验证通过,并根据业务需求选择是否自动提交并审核。 通过以上步骤,我们成功实现了将源平台的数据经过ETL转换后,写入目标平台金蝶云星空API接口。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)