ETL转换与数据传输:轻易云在畅捷通T+与吉客云之间的数据集成应用

  • 轻易云集成顾问-吴伟
### 案例分享:畅捷通T+数据集成到吉客云 在本案例中,我们将着重介绍如何通过轻易云数据集成平台,实现畅捷通T+材料出库单【蓝字】的数据高效且可靠地集成到吉客云出库单创建的过程。为了确保每个环节都清晰透明,本文不仅重点聚焦API接口调用和数据转换,还会探讨应对各种技术挑战的方法,包括分页处理、限流控制与错误重试机制等。 首先,需要从畅捷通T+系统中抓取材料出库单的数据,使用的API为 `/tplus/api/v2/MaterialDispatchOpenApi/FindVoucherList`。此API支持按需查询具体的出库单信息,为了实现无缝对接,在调度过程中必须考虑分页与限流问题以确保获取的数据完整且不漏单。此外,通过定时任务设定,可以保证及时而稳定地获取最新数据。 其次,将获取到的大量材料出库单数据快速写入到吉客云,对应的API是 `erp.storage.stockoutcreate`。这里面临一个重要挑战,即需要处理两者之间的数据格式差异。在实际操作中,要针对每个字段进行精确映射,并可能需要执行一定的转换逻辑,以满足吉客云数据库结构和业务需求。 为进一步保障数据传输过程中的准确性和稳健性,我们配置了一系列异常处理与错误重试机制。例如,当遇到网络延迟或服务器响应缓慢时,通过设置合理的重试策略来减少失败率,同时记录详细日志方便后续排查。 最后,采用可视化界面监控整个流程,从调度任务启动、接口调用,到最终成功提交至吉客云,每一步都有明确状态显示,这极大提升了业务运作透明度和效率。同时,也能够实时查看并分析出现的问题,从而迅速做出调整和优化。 接下来,我们将详细展示具体集成方案及其实施步骤…… ![用友BIP接口开发配置](https://pic.qeasy.cloud/D21.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统畅捷通T+接口获取并加工数据 在数据集成过程中,调用源系统接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用畅捷通T+的接口`/tplus/api/v2/MaterialDispatchOpenApi/FindVoucherList`,并对获取的数据进行加工处理。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用接口。以下是我们使用的元数据配置: ```json { "api": "/tplus/api/v2/MaterialDispatchOpenApi/FindVoucherList", "effect": "QUERY", "method": "POST", "number": "Code", "id": "Code", "idCheck": true, "request": [ { "field": "selectFields", "label": "查询字段", "type": "string", "describe": "部门编码", "value": "VoucherCode,CustomerCode,WarehouseCode,Inventory,InventoryCode,Specification,Unit,Quantity" }, { "field": "pageIndex", "label": "pageIndex", "type": "string", "describe": "部门名称" }, { "field": "pageSize", "label": "pageSize", "type": "string", "describe": "指定返回字段", "value": "10" }, { "field": "paramDic_1", "label": "paramDic参数", "type": ":object", ... } ], ... } ``` #### 请求参数解析 在请求参数中,我们主要关注以下几个字段: - `selectFields`: 指定需要查询的字段,包括`VoucherCode`, `CustomerCode`, `WarehouseCode`, `Inventory`, `InventoryCode`, `Specification`, `Unit`, 和`Quantity`。 - `pageIndex`: 用于分页查询,指定当前页码。 - `pageSize`: 每页返回的数据条数,这里设置为10。 - `paramDic_1`和`paramDic_2`: 用于传递额外的查询条件,例如上级部门编码和仓库ID。 这些参数确保了我们能够精确地获取所需的数据,并且支持分页查询以处理大量数据。 #### 数据清洗与转换 在获取到原始数据后,我们需要对其进行清洗和转换,以便后续处理。以下是一个简单的数据清洗示例: ```python def clean_data(data): cleaned_data = [] for record in data: if record['Quantity'] > 0: cleaned_record = { 'VoucherCode': record['VoucherCode'], 'CustomerCode': record['CustomerCode'], 'WarehouseCode': record['WarehouseCode'], 'Inventory': record['Inventory'], 'InventoryCode': record['InventoryCode'], 'Specification': record['Specification'], 'Unit': record['Unit'], 'Quantity': record['Quantity'] } cleaned_data.append(cleaned_record) return cleaned_data ``` 在这个示例中,我们过滤掉了数量小于或等于0的记录,并保留了所需的字段。 #### 数据写入目标系统 清洗后的数据需要写入到目标系统。在本案例中,目标系统为吉客云出库单创建接口。我们可以使用类似的方法来配置目标系统的API,并将清洗后的数据写入: ```json { ... // 配置目标系统API } ``` 通过轻易云数据集成平台,我们可以实现从源系统到目标系统的数据无缝对接,确保每个环节都透明可控。 #### 实时监控与调试 为了确保数据集成过程的顺利进行,实时监控和调试是必不可少的。轻易云平台提供了强大的监控功能,可以实时查看数据流动和处理状态,及时发现并解决问题。 通过上述步骤,我们成功地完成了从畅捷通T+接口获取、清洗、转换并写入到吉客云出库单创建的全过程。这一过程不仅提高了业务效率,还确保了数据的一致性和准确性。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与写入吉客云API接口 在轻易云数据集成平台的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台吉客云API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何通过元数据配置实现这一过程。 #### 元数据配置解析 我们使用的元数据配置如下: ```json { "api": "erp.storage.stockoutcreate", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "outWarehouseCode", "label": "仓库编码", "type": "string", "describe": "仓库编码", "value": "{{Warehouse.Code}}"}, {"field": "outType", "label": "出库类型", "type": "string", "describe": "入库类型 101=采购入库 102=调拨入库 103=盘盈入库 104=其他入库", "value": "204"}, {"field": "relDataId", "label": "关联单据编号", "type": "string", "describe": "可随机,保证不重复即可", "value": "{Code}"}, {"field": "applyDate", "label": "申请出库时间", "type": "string", "describe": "申请时间", "value": "{AuditedDate}"}, {"field": "memo", "label": "申请单的备注信息", "type": "string", ... ``` #### 数据请求与清洗 在数据请求与清洗阶段,我们从源系统提取原始数据,并进行必要的数据清洗和预处理。这一步确保了后续的数据转换和写入过程能够顺利进行。以下是一些关键字段的映射和处理逻辑: - **仓库编码(outWarehouseCode)**:从源系统中的`Warehouse.Code`字段获取。 - **出库类型(outType)**:固定值为`204`,表示材料出库。 - **关联单据编号(relDataId)**:使用源系统中的`Code`字段。 - **申请出库时间(applyDate)**:使用源系统中的`AuditedDate`字段。 - **备注信息(memo)**:拼接字符串“材料出库单蓝字-{Code}”,其中`{Code}`为源系统中的单据编号。 #### 数据转换与写入 在数据转换阶段,我们将清洗后的数据按照吉客云API接口所需的格式进行转换。具体来说,需要将各个字段映射到目标API接口的请求参数中,并确保数据格式符合要求。 以下是几个关键字段及其处理方式: 1. **货品编号(goodsNo)**: - 从源系统的`RDRecordDetails.InventoryCode`字段获取。 2. **条形码(skuBarcode)**: - 拼接多个字段,包括`RDRecordDetails.InventoryCode`, `RDRecordDetails.freeitem0`, `RDRecordDetails.freeitem1`。 3. **出库数量(skuCount)**: - 从源系统的`RDRecordDetails.Quantity`字段获取。 4. **批次信息集合(batchList)**: - 包含多个子字段,如货品批号、生产日期、质保期单位、到期时间等,分别从相应的源系统字段中获取。 下面是一个示例请求体: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ``` #### 实际案例应用 假设我们有一张材料出库单,其仓库编码为“WH001”,单据编号为“OUT12345”,审核日期为“2023-10-01”。该出库单包含以下明细: - 货品编号:P001 - 条形码:P001A1B2 - 出库数量:100 - 批次信息: - 批号:B001 - 生产日期:2023-09-01 - 到期时间:2024-09-01 通过上述元数据配置,我们可以生成如下请求体: ```json { ... } ``` #### 总结 通过轻易云数据集成平台,我们能够高效地将源平台的数据进行ETL转换,并写入到吉客云API接口中。本文详细解析了元数据配置及其应用,为实际操作提供了明确指导。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)