轻易云数据集成:ETL转换与金蝶云星空API写入实践

  • 轻易云集成顾问-李国敏
### 聚水潭数据集成到金蝶云星空案例分享 在本次技术案例中,我们将详细探讨如何实现聚水潭系统的其他出库单数据与金蝶云星空的无缝对接。本方案具体命名为:聚水潭-其他出库单-->金蝶-其他出库单。此集成过程不仅要确保数据完整和准确,还需处理大量数据快速写入以及定时可靠的数据抓取。 首先,针对聚水潭接口数据的获取,我们使用了API /open/other/inout/query,该接口支持分页查询,从而有效解决大批量数据的一次性传输问题,并且通过限流机制避免服务过载。在实际操作中,这一过程要求实时监控与日志记录,以保证每个步骤都有迹可循,干扰最小。 为了将收集到的数据高效写入至金蝶云星空系统,我们采用了其提供的batchSave API。这使得我们能够批量处理多个出库单,提高整体运行效率。但是,在这过程中,需要特别注意两平台间的数据格式差异。为此,我们设计了一套自适应映射规则,以及特定场景下的异常处理与错误重试机制,确保每条记录都能无误地传输并保存。 下一步内容,将更深入解析如何配置这些API调用、实现数据转换与同步操作,以及整个集成流程中的关键技术点,包括分页处理和限流控制等。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口/open/other/inout/query获取并加工数据的技术案例 在数据集成过程中,调用源系统接口是关键的第一步。本文将深入探讨如何通过轻易云数据集成平台调用聚水潭接口`/open/other/inout/query`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用聚水潭的接口。以下是元数据配置的详细内容: ```json { "api": "/open/other/inout/query", "effect": "QUERY", "method": "POST", "number": "io_id", "id": "io_id", "idCheck": true, "request": [ {"field": "modified_begin", "label": "开始修改时间", "type": "datetime", "describe": "111", "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "modified_end", "label": "结束修改时间", "type": "datetime", "describe": "111", "value": "{{CURRENT_TIME|datetime}}"}, {"field": "so_ids", "label": "线上订单号", "type": "string", "describe": "111"}, {"field": "status", "label": "单据状态", "type": "string", "describe":"单据状态,Confirmed=生效,WaitConfirm待审核,Archive=归档,Cancelled=取消","value":"Confirmed"}, {"field":"page_index","label":"page_index","type":"string","describe":"111","value":"1"}, {"field":"page_size","label":"page_size","type":"string","describe":"111","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"types","label":"单据类型","type":"string","value":"其它出库","parser":{"name":"StringToArray","params":","}} ], "buildModel": true, "autoFillResponse": true, "condition":[ [{"field":"so_id","logic":"notlike","value":"FBDR"},{"field":"labels","logic":"notlike","value":"星空单据"}] ], “beatFlat”: ["items"] } ``` #### 请求参数解析 1. **时间范围**:`modified_begin`和`modified_end`字段分别表示查询的开始和结束时间,这两个字段使用动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`来自动填充。 2. **单据状态**:默认值为“Confirmed”,表示只查询已生效的单据。 3. **分页参数**:通过`page_index`和`page_size`控制分页查询,以避免一次性拉取过多数据。 4. **单据类型**:固定为“其它出库”,并使用解析器将字符串转换为数组格式。 #### 数据过滤与条件设置 在实际应用中,我们可能需要对返回的数据进行进一步过滤。这里设置了两个条件: - `so_id`不包含“FBDR” - `labels`不包含“星空单据” 这些条件确保我们只获取符合业务需求的数据。 #### 数据请求与清洗 通过上述配置,我们可以发起POST请求来获取数据。轻易云平台会自动处理响应,并根据配置进行初步清洗。例如,将嵌套的“items”字段拍平(beatFlat),方便后续处理。 ```json { // 示例请求体 { “modified_begin”: “2023-10-01T00:00:00Z”, “modified_end”: “2023-10-31T23:59:59Z”, “status”: “Confirmed”, “page_index”: “1”, “page_size”: “100”, “types”: [“其它出库”] } } ``` 响应示例: ```json { // 示例响应体 { “code”: “200”, “message”: “Success”, “data”: [ { “io_id”: “12345”, // 更多字段... “items”: [ {“item_id”: “A1”, ...}, {“item_id”: “A2”, ...} ] }, // 更多记录... ] } } ``` #### 数据转换与写入准备 在完成数据请求与清洗后,下一步是将数据转换为目标系统所需的格式,并准备写入。由于本文重点在于调用接口和初步加工,因此具体的转换与写入将在后续步骤中详细讨论。 通过以上步骤,我们成功实现了从聚水潭系统获取并初步处理其他出库单的数据,为后续的数据转换与写入奠定了基础。这一过程展示了轻易云平台在异构系统集成中的强大能力,使得复杂的数据处理变得简单高效。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将源平台数据转换为金蝶云星空API接口格式并写入目标平台 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在完成数据请求与清洗后,我们获得了源平台的数据。接下来,我们需要将这些数据转换为金蝶云星空API接口所能接受的格式。以下是元数据配置的具体内容: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "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": "QTCKD01_SYS" }, { "field": "FStockOrgId", ... } ], ... } ``` #### 数据转换 1. **单据类型(FBillTypeID)**: - 使用`ConvertObjectParser`解析器,将值转换为金蝶系统识别的编号。 - 示例值:"QTCKD01_SYS"表示标准其他出库单。 2. **库存组织(FStockOrgId)**: - 同样使用`ConvertObjectParser`解析器,将品牌信息映射为金蝶系统中的组织编号。 - 示例值:"65795ef25d4e0914df5d73ae"。 3. **领用组织(FPickOrgId)**: - 与库存组织类似,使用相同的解析器和映射方式。 4. **单据编号(FBillNo)**: - 直接从源数据中获取,如"{io_id}"。 5. **货主类型(FOwnerTypeIdHead)**和**货主(FOwnerIdHead)**: - 分别设置为固定值"BD_OwnerOrg"和通过解析器转换的品牌信息。 6. **库存方向(FStockDirect)**: - 固定为"GENERAL"。 7. **日期(FDate)**: - 从源数据中获取,如"{io_date}"。 8. **领料部门(FDeptId)**: - 使用条件表达式,根据品牌不同设置不同的部门编号。 - 示例表达式:"_function CASE '{brand}' WHEN '7or9' THEN 'BM2800' WHEN '对面' THEN 'DM1003' ELSE '' END"。 9. **备注(FNote)**: - 从源数据中获取,如"{remark}"。 10. **明细信息(FEntity)**: - 包含多个字段,每个字段对应一个物料明细。 - 如物料编码、实发数量、发货仓库、库存状态等,均需通过相应的解析器和映射方式进行转换。 #### 数据写入 在完成上述字段的转换后,我们将这些数据打包并通过API接口写入金蝶云星空系统。具体配置如下: ```json { ... "otherRequest": [ { "field": "FormId", ... }, { ... } ], ... } ``` 1. **业务对象表单Id(FormId)**: - 必须填写金蝶的表单ID,如"PSTK_MisDelivery"表示其他出库单。 2. **提交并审核(IsAutoSubmitAndAudit)**: - 设置为true,表示自动提交并审核该单据。 3. **验证基础资料(IsVerifyBaseDataField)**: - 设置为true,以确保所有基础资料有效性。 4. **执行操作(Operation)**: - 固定为"Save",表示保存操作。 5. **可以负库存(InterationFlags)**: - 设置相关标志位以允许负库存操作,如"STK_InvCheckResult"。 #### 操作方法 使用`batchArraySave`方法批量保存数组形式的数据,并通过配置`groupCalculate`进行分组计算,以确保数据的一致性和准确性。例如: ```json { ... "operation": { ... }, ... } ``` 通过以上配置,我们实现了将源平台的数据成功转换并写入到金蝶云星空系统中。这一过程不仅保证了数据的一致性和准确性,还极大提升了业务处理效率。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)